using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkAnalystTools._Analysis
{
    /// <summary>
    /// <para>Solve Vehicle Routing Problem</para>
    /// <para>Creates a vehicle routing problem (VRP) network analysis layer, sets the analysis properties, and solves the analysis, which is ideal for setting up a VRP web service. A VRP analysis layer finds the best routes for a fleet of vehicles.</para>
    /// <para>创建车辆配送问题 （VRP） 网络分析图层，设置分析属性并求解分析，这是设置 VRP Web 服务的理想选择。VRP 分析图层可查找车队的最佳路径。</para>
    /// </summary>    
    [DisplayName("Solve Vehicle Routing Problem")]
    public class SolveVehicleRoutingProblem : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SolveVehicleRoutingProblem()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_orders">
        /// <para>Orders</para>
        /// <para>In the case of an exchange visit, an order can have both delivery and pickup quantities.</para>
        /// <para>在交换访问的情况下，订单可以同时具有交货数量和取货数量。</para>
        /// </param>
        /// <param name="_depots">
        /// <para>Depots</para>
        /// <para><xdoc>
        ///   <para>A depot is a location that a vehicle departs from at the beginning of the workday and returns to at the end of the workday. Vehicles are loaded (for deliveries) or unloaded (for pickups) at depots at the start of the route. In some cases, a depot can also act as a renewal location, whereby the vehicle can unload or reload and continue performing deliveries and pickups. A depot has open and close times, as specified by a hard time window. Vehicles can't arrive at a depot outside of this time window.</para>
        ///   <para>The depots feature set has an associated attribute table. The fields in the attribute table are listed and described below.</para>
        ///   <para>ObjectID:</para>
        ///   <para>The system-managed ID field.</para>
        ///   <para>Shape:</para>
        ///   <para>The geometry field indicating the geographic location of the network analysis object.</para>
        ///   <para>Name:</para>
        ///   <para>The name of the depot. The StartDepotName and EndDepotName fields of the routes record set reference the names you specify here. It is also referenced by the route renewals record set, when used.</para>
        ///   <para>Depot names are not case sensitive and must be nonempty and unique.</para>
        ///   <para>TimeWindowStart1:</para>
        ///   <para>The beginning time of the first time window for the network location. This field can contain a null value; a null value indicates no beginning time.</para>
        ///   <bulletList>
        ///     <bullet_item>
        ///       <para>Time window fields can contain a time-only value or a date and time value. If a time field has a time-only value (for example, 8:00 a.m.), the date is assumed to be the date specified by the Default Date parameter of the analysis layer. Using date and time values (for example, 7/11/2010 8:00 a.m.) allows you to set time windows that span multiple days.</para>
        ///     </bullet_item><para/>
        ///     <bullet_item>
        ///       <para>The default date is ignored when any time window field includes a date with the time. To avoid an error in this situation, format all time windows in Depots, Routes, Orders, and Breaks to also include the date with the time.</para>
        ///     </bullet_item><para/>
        ///     <bullet_item>
        ///       <para>If you're using traffic data, the time-of-day fields for the network location always reference the same time zone as the edge on which the network location is located.</para>
        ///     </bullet_item><para/>
        ///   </bulletList>
        ///   <para>TimeWindowEnd1:</para>
        ///   <para>The ending time of the first time window for the network location. This field can contain a null value; a null value indicates no ending time.</para>
        ///   <para>TimeWindowStart2:</para>
        ///   <para>The beginning time of the second time window for the network location. This field can contain a null value; a null value indicates that there is no second time window.</para>
        ///   <para>If the first time window is null as specified by the TimeWindowStart1 and TimeWindowEnd1 fields, the second time window must also be null.</para>
        ///   <para>If both time windows are nonnull, they can't overlap. Also, the second time window must occur after the first.</para>
        ///   <para>TimeWindowEnd2:</para>
        ///   <para>The ending time of the second time window for the network location. This field can contain a null value.</para>
        ///   <para>When TimeWindowStart2 and TimeWindowEnd2 are both null, there is no second time window.</para>
        ///   <para>When TimeWindowStart2 is not null but TimeWindowEnd2 is null, there is a second time window that has a starting time but no ending time. This is valid.</para>
        ///   <para>CurbApproach:</para>
        ///   <para>The CurbApproach property specifies the direction a vehicle may arrive at and depart from the network location. There are four choices (their coded values are shown in parentheses):
        ///   <bulletList>
        ///     <bullet_item>Either side of vehicle (0)—The vehicle can approach and depart the network location in either direction. U-turns are allowed. You should choose this setting if your vehicle can make a U-turn at the stop or if it can pull into a driveway or parking lot and turn around.  </bullet_item><para/>
        ///     <bullet_item>Right side of vehicle (1)—When the vehicle approaches and departs the network location, the curb must be on the right side of the vehicle. A U-turn is prohibited.  </bullet_item><para/>
        ///     <bullet_item>Left side of vehicle (2)—When the vehicle approaches and departs the network location, the curb must be on the left side of the vehicle. A U-turn is prohibited.  </bullet_item><para/>
        ///     <bullet_item>No U-Turn (3)—When the vehicle approaches the network location, the curb can be on either side of the vehicle; however, the vehicle must depart without turning around.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Bearing:</para>
        ///   <para>The direction in which a point is moving. The units are degrees and are measured in a clockwise fashion from true north. This field is used in conjunction with the BearingTol field.</para>
        ///   <para>Bearing data is usually sent automatically from a mobile device that is equipped with a GPS receiver. Try to include bearing data if you are loading an order that is moving, such as a pedestrian or a vehicle.</para>
        ///   <para>Using this field tends to prevent adding locations to the wrong edges, which can occur when a vehicle is near an intersection or an overpass, for example. Bearing also helps Network Analyst determine which side of the street the point is on.</para>
        ///   <para>For more information, see Bearing and BearingTol.</para>
        ///   <para>BearingTol:</para>
        ///   <para>The bearing tolerance value creates a range of acceptable bearing values when locating moving points on an edge using the Bearing field. If the value from the Bearing field is within the range of acceptable values that are generated from the bearing tolerance on an edge, the point can be added as a network location there; otherwise, the closest point on the next-nearest edge is evaluated.</para>
        ///   <para>The units are in degrees, and the default value is 30. Values must be greater than zero and less than 180.</para>
        ///   <para>A value of 30 means that when Network Analyst attempts to add a network location on an edge, a range of acceptable bearing values is generated 15º to either side of the edge (left and right) and in both digitized directions of the edge.</para>
        ///   <para>For more information, see Bearing and BearingTol.</para>
        ///   <para>NavLatency:</para>
        ///   <para>This field is only used in the solve process if Bearing and BearingTol also have values; however, entering a NavLatency value is optional, even when values are present in Bearing and BearingTol. NavLatency indicates how much time is expected to elapse from the moment GPS information is sent from a moving vehicle to a server and the moment the processed route is received by the vehicle's navigation device. The time units of NavLatency are the same as the units of the cost attribute specified by the Time Attribute parameter.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>仓库是车辆在工作日开始时出发并在工作日结束时返回的位置。车辆在路线起点的仓库装货（用于送货）或卸货（用于取货）。在某些情况下，仓库还可以充当更新位置，车辆可以卸载或重新装载并继续执行交付和取货。仓库有开放和关闭时间，由硬时间窗口指定。车辆无法在此时间窗口之外到达仓库。</para>
        ///   <para>depot 要素集具有关联的属性表。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para>对象 ID：</para>
        ///   <para>系统管理的 ID 字段。</para>
        ///   <para>形状：</para>
        ///   <para>指示网络分析对象的地理位置的几何字段。</para>
        ///   <para>名字：</para>
        ///   <para>仓库的名称。路由记录集的 StartDepotName 和 EndDepotName 字段引用您在此处指定的名称。使用时，路由续订记录集也会引用它。</para>
        ///   <para>仓库名称不区分大小写，必须为非空且唯一。</para>
        ///   <para>时间窗口开始1：</para>
        ///   <para>网络位置的第一个时间窗口的开始时间。此字段可以包含 null 值;null 值表示没有开始时间。</para>
        ///   <bulletList>
        ///     <bullet_item>
        ///       <para>时间窗口字段可以包含仅时间值或日期和时间值。如果时间字段具有仅时间值（例如，上午 8：00），则假定该日期为分析图层的默认日期参数指定的日期。使用日期和时间值（例如，2010 年 7 月 11 日上午 8：00）可以设置跨多天的时间窗口。</para>
        ///     </bullet_item><para/>
        ///     <bullet_item>
        ///       <para>当任何时间窗口字段包含带有时间的日期时，将忽略默认日期。为避免在这种情况下出现错误，请设置“仓库”、“路线”、“订单”和“休息时间”中所有时间窗口的格式，以同时包含日期和时间。</para>
        ///     </bullet_item><para/>
        ///     <bullet_item>
        ///       <para>如果使用流量数据，则网络位置的时间字段始终引用与网络位置所在的边相同的时区。</para>
        ///     </bullet_item><para/>
        ///   </bulletList>
        ///   <para>时间窗口结束1：</para>
        ///   <para>网络位置的第一个时间窗口的结束时间。此字段可以包含 null 值;null 值表示没有结束时间。</para>
        ///   <para>时间窗口开始2：</para>
        ///   <para>网络位置的第二个时间窗口的开始时间。此字段可以包含 null 值;null 值表示没有第二个时间窗口。</para>
        ///   <para>如果 TimeWindowStart1 和 TimeWindowEnd1 字段指定的第一个时间窗口为 null，则第二个时间窗口也必须为 null。</para>
        ///   <para>如果两个时间窗口均为非空值，则它们不能重叠。此外，第二个时间窗口必须发生在第一个时间窗口之后。</para>
        ///   <para>时间窗口结束2：</para>
        ///   <para>网络位置的第二个时间窗口的结束时间。此字段可以包含 null 值。</para>
        ///   <para>当 TimeWindowStart2 和 TimeWindowEnd2 均为 null 时，没有第二个时间窗口。</para>
        ///   <para>当 TimeWindowStart2 不为 null 但 TimeWindowEnd2 为 null 时，存在第二个时间窗口，该时间窗口具有开始时间但没有结束时间。这是有效的。</para>
        ///   <para>遏制方法：</para>
        /// <para>CurbApproach 属性指定车辆可能到达和离开网络位置的方向。有四个选项（其编码值显示在括号中）：
        ///   <bulletList>
        ///     <bullet_item>车辆 （0） 的任一侧 - 车辆可以在任一方向上接近和离开网络位置。允许掉头。如果您的车辆可以在停车处掉头，或者可以驶入车道或停车场并掉头，则应选择此设置。 </bullet_item><para/>
        ///     <bullet_item>车辆右侧 （1） - 当车辆接近和离开网络位置时，路缘必须位于车辆的右侧。禁止掉头。 </bullet_item><para/>
        ///     <bullet_item>车辆左侧 （2） - 当车辆接近和离开网络位置时，路缘必须位于车辆的左侧。禁止掉头。 </bullet_item><para/>
        ///     <bullet_item>无掉头 （3） - 当车辆接近网络位置时，路缘可以位于车辆的任一侧;但是，车辆必须在不掉头的情况下离开。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>轴承：</para>
        ///   <para>点移动的方向。单位是度数，从正北开始按顺时针方向测量。此字段与 BearingTol 字段结合使用。</para>
        ///   <para>轴承数据通常从配备 GPS 接收器的移动设备自动发送。如果您要加载正在移动的订单（例如行人或车辆），请尝试包含方位角数据。</para>
        ///   <para>使用此字段可以防止将位置添加到错误的边缘，例如，当车辆靠近交叉路口或立交桥时，可能会发生这种情况。方位角还有助于 Network Analyst 确定点位于街道的哪一侧。</para>
        ///   <para>有关详细信息，请参阅轴承和轴承Tol。</para>
        ///   <para>轴承Tol：</para>
        ///   <para>当使用“轴承”（Bearing） 场在边上定位移动点时，轴承公差值会创建可接受的轴承值范围。如果“方位角”（Bear） 场中的值在边上的方位公差生成的可接受值范围内，则可以将该点添加为该点作为网络位置;否则，将计算下一个最近边上的最近点。</para>
        ///   <para>单位以度为单位，默认值为 30。值必须大于零且小于 180。</para>
        ///   <para>值 30 表示当 Network Analyst 尝试在边上添加网络位置时，将在边的任一侧（左侧和右侧）以及边的两个数字化方向上生成一系列可接受的方位角值。</para>
        ///   <para>有关详细信息，请参阅轴承和轴承Tol。</para>
        ///   <para>NavLatency：</para>
        ///   <para>仅当 Bearing 和 BearingTol 也具有值时，此字段才用于求解过程;但是，输入 NavLatency 值是可选的，即使 Bearing 和 BearingTol 中存在值也是如此。NavLatency 表示从 GPS 信息从移动车辆发送到服务器的那一刻到车辆的导航设备接收到处理路线的那一刻，预计要经过多少时间。NavLatency 的时间单位与 Time Attribute 参数指定的成本属性的单位相同。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_routes">
        /// <para>Routes</para>
        /// <para><xdoc>
        ///   <para>The routes that are available for the given vehicle routing problem. A route specifies vehicle and driver characteristics; after solving, it also represents the path between depots and orders.</para>
        ///   <para>A route can have start and end depot service times, a fixed or flexible starting time, time-based operating costs, distance-based operating costs, multiple capacities, various constraints on a driver's workday, and so on.</para>
        ///   <para>The routes record set has several attributes. The fields in the attribute table are listed and described below.</para>
        ///   <para>Name:</para>
        ///   <para>The name of the route. The name must be unique.</para>
        ///   <para>Network Analyst generates a unique name at solve time if the field value is null. Therefore, entering a value is optional in most cases. However, you must enter a name if your analysis includes breaks, route renewals, route zones, or orders that are preassigned to a route, because the route name is used as a foreign key in these cases. Note that route names are not case sensitive.</para>
        ///   <para>StartDepotName:</para>
        ///   <para>The name of the starting depot for the route. This field is a foreign key to the Name field in Depots.</para>
        ///   <para>If the StartDepotName value is null, the route will begin from the first order assigned. Omitting the start depot is useful when the vehicle's starting location is unknown or irrelevant to your problem. However, when StartDepotName is null, EndDepotName cannot also be null.</para>
        ///   <para>Virtual start depots are not allowed if orders or depots are in multiple time zones.</para>
        ///   <para>If the route is making deliveries and StartDepotName is null, it is assumed the cargo is loaded on the vehicle at a virtual depot before the route begins. For a route that has no renewal visits, its delivery orders (those with nonzero DeliveryQuantities values in the Orders class) are loaded at the start depot or virtual depot. For a route that has renewal visits, only the delivery orders before the first renewal visit are loaded at the start depot or virtual depot.</para>
        ///   <para>EndDepotName:</para>
        ///   <para>The name of the ending depot for the route. This field is a foreign key to the Name field in the Depots parameter.</para>
        ///   <para>StartDepotServiceTime:</para>
        ///   <para>The service time at the starting depot. This can be used to model the time spent for loading the vehicle. This field can contain a null value; a null value indicates zero service time.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>The service times at the start and end depots are fixed values (given by the StartDepotServiceTime and EndDepotServiceTime field values) and do not take into account the actual load for a route. For example, the time taken to load a vehicle at the starting depot may depend on the size of the orders. As such, the depot service times could be given values corresponding to a full truckload or an average truckload, or you could make your own time estimate.</para>
        ///   <para>EndDepotServiceTime:</para>
        ///   <para>The service time at the ending depot. This can be used to model the time spent for unloading the vehicle. This field can contain a null value; a null value indicates zero service time.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>The service times at the start and end depots are fixed values (given by the StartDepotServiceTime and EndDepotServiceTime field values) and do not take into account the actual load for a route. For example, the time taken to load a vehicle at the starting depot may depend on the size of the orders. As such, the depot service times could be given values corresponding to a full truckload or an average truckload, or you could make your own time estimate.</para>
        ///   <para>EarliestStartTime:</para>
        ///   <para>The earliest allowable starting time for the route. This is used by the solver in conjunction with the time window of the starting depot for determining feasible route start times.</para>
        ///   <para>This field can't contain null values and has a default time-only value of 8:00 a.m.; the default value is interpreted as 8:00 a.m. on the date given by the Default Date parameter (default_date in Python).</para>
        ///   <para>The default date is ignored when any time window field includes a date with the time. To avoid an error in this situation, format all time windows in Depots, Routes, Orders, and Breaks to also include the date with the time.</para>
        ///   <para>When using network datasets with traffic data across multiple time zones, the time zone for EarliestStartTime is the same as the time zone of the edge or junction on which the starting depot is located.</para>
        ///   <para>LatestStartTime:</para>
        ///   <para>The latest allowable starting time for the route. This field can't contain null values and has a default time-only value of 10:00 a.m; the default value is interpreted as 10:00 a.m. on the date given by the Default Date property of the analysis layer.</para>
        ///   <para>When using network datasets with traffic data across multiple time zones, the time zone for LatestStartTime is the same as the time zone of the edge or junction on which the starting depot is located.</para>
        ///   <para>ArriveDepartDelay</para>
        ///   <para>This field stores the amount of travel time needed to accelerate the vehicle to normal travel speeds, decelerate it to a stop, and move it off and on the network (for example, in and out of parking). By including an ArriveDepartDelay value, the VRP solver is deterred from sending many routes to service physically coincident orders.</para>
        ///   <para>The cost for this property is incurred between visits to noncoincident orders, depots, and route renewals. For example, when a route starts from a depot and visits the first order, the total arrive/depart delay is added to the travel time. The same is true when traveling from the first order to the second order. If the second and third orders are coincident, the ArriveDepartDelay value is not added between them since the vehicle doesn't need to move. If the route travels to a route renewal, the value is added to the travel time again.</para>
        ///   <para>Although a vehicle needs to slow down and stop for a break and accelerate afterward, the VRP solver cannot add the ArriveDepartDelay value for breaks. This means that if a route leaves an order, stops for a break, and continues to the next order, the arrive/depart delay is added only once, not twice.</para>
        ///   <para>To illustrate, assume there are five coincident orders in a high-rise building, and they are serviced by three different routes. This means three arrive/depart delays would be incurred; that is, three drivers would need to separately find parking places and enter the same building. However, if the orders could be serviced by just one route instead, only one driver would need to park and enter the building—only one arrive/depart delay would be incurred. Since the VRP solver tries to minimize cost, it will try to limit the arrive/depart delays and thus choose the single-route option. (Note that multiple routes may need to be sent when other constraints—such as specialties, time windows, or capacities—require it.)</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>Capacities:</para>
        ///   <para>The maximum capacity of the vehicle. You can specify capacity in any dimension, such as weight, volume, or quantity. You can even specify multiple dimensions, for example, weight and volume.</para>
        ///   <para>Enter capacities without indicating units. For example, assume your vehicle can carry a maximum of 40,000 pounds; you would enter 40000. You need to remember for future reference that the value is in pounds.</para>
        ///   <para>If you are tracking multiple dimensions, separate the numeric values with a space. For instance, if you are recording both weight and volume and your vehicle can carry a maximum weight of 40,000 pounds and a maximum volume of 2,000 cubic feet, Capacities should be entered as 40000 2000. Again, you need to remember the units. You also need to remember the sequence the values and their corresponding units are entered (pounds followed by cubic feet in this case).</para>
        ///   <para>Remembering the units and the unit sequence is important for a couple of reasons: one, so you can reinterpret the information later; two, so you can properly enter values for the DeliveryQuantities and PickupQuantities fields for Orders. To elaborate on the second point, note that the VRP solver simultaneously refers to Capacities, DeliveryQuantities, and PickupQuantities to make sure that a route doesn't become overloaded. Since units can't be entered in the field, Network Analyst can't make unit conversions, so you need to enter the values for the three fields using the same units and the same unit sequence to ensure that the values are correctly interpreted. If you combine units or change the sequence in any of the three fields, you will get unwanted results without receiving a warning messages. Thus, it is a good idea to set up a unit and unit-sequence standard beforehand and continually refer to it whenever entering values for these three fields.</para>
        ///   <para>An empty string or null value is equivalent to all values being zero. Capacity values can't be negative.</para>
        ///   <para>If the Capacities string has an insufficient number of values in relation to the DeliveryQuantities or PickupQuantities field for orders, the remaining values are treated as zero.</para>
        ///   <para>
        ///     <para>The VRP solver only performs a simple Boolean test to determine whether capacities are exceeded. If a route's capacity value is greater than or equal to the total quantity being carried, the VRP solver will assume the cargo fits in the vehicle. This could be incorrect, depending on the actual shape of the cargo and the vehicle. For example, the VRP solver allows you to fit a 1,000-cubic-foot sphere into a 1,000-cubic-foot truck that is 8 feet wide. In reality, however, since the sphere is 12.6 feet in diameter, it won't fit in the 8-foot-wide truck.</para>
        ///   </para>
        ///   <para>FixedCost:</para>
        ///   <para>A fixed monetary cost that is incurred only if the route is used in a solution (that is, it has orders assigned to it). This field can contain null values; a null value indicates zero fixed cost. This cost is part of the total route operating cost.</para>
        ///   <para>CostPerUnitTime:</para>
        ///   <para>The monetary cost incurred—per unit of work time—for the total route duration, including travel times as well as service times and wait times at orders, depots, and breaks. This field can't contain a null value and has a default value of 1.0.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>CostPerUnitDistance:</para>
        ///   <para>The monetary cost incurred—per unit of distance traveled—for the route length (total travel distance). This field can contain null values; a null value indicates zero cost.</para>
        ///   <para>The unit for this field value is specified by the Distance Field Units parameter (distance_units for Python).</para>
        ///   <para>OvertimeStartTime:</para>
        ///   <para>The duration of regular work time before overtime computation begins. This field can contain null values; a null value indicates that overtime does not apply.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>For example, if the driver is to be paid overtime when the total route duration extends beyond eight hours, OvertimeStartTime is specified as 480 (8 hours * 60 minutes/hour), given the Time Field Units parameter is set to Minutes.</para>
        ///   <para>CostPerUnitOvertime:</para>
        ///   <para>The monetary cost incurred per time unit of overtime work. This field can contain null values; a null value indicates that the CostPerUnitOvertime value is the same as the CostPerUnitTime value.</para>
        ///   <para>MaxOrderCount:</para>
        ///   <para>The maximum allowable number of orders on the route. This field can't contain null values and has a default value of 30.</para>
        ///   <para>MaxTotalTime:</para>
        ///   <para>The maximum allowable route duration. The route duration includes travel times as well as service and wait times at orders, depots, and breaks. This field can contain null values; a null value indicates that there is no constraint on the route duration.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>MaxTotalTravelTime:</para>
        ///   <para>The maximum allowable travel time for the route. The travel time includes only the time spent driving on the network and does not include service or wait times.</para>
        ///   <para>This field can contain null values; a null value indicates there is no constraint on the maximum allowable travel time. This field value can't be larger than the MaxTotalTime field value.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>MaxTotalDistance:</para>
        ///   <para>The maximum allowable travel distance for the route.</para>
        ///   <para>The unit for this field value is specified by the Distance Field Units parameter (distance_units for Python).</para>
        ///   <para>This field can contain null values; a null value indicates that there is no constraint on the maximum allowable travel distance.</para>
        ///   <para>SpecialtyNames:</para>
        ///   <para>A space-separated string containing the names of the specialties supported by the route. A null value indicates that the route does not support any specialties.</para>
        ///   <para>This field is a foreign key to the SpecialtyNames field in the Orders parameter.</para>
        ///   <para>To illustrate what specialties are and how they work, assume a lawn care and tree trimming company has a portion of its orders that requires a bucket truck to trim tall trees. The company would enter BucketTruck in the SpecialtyNames field for these orders to indicate their special need. SpecialtyNames would be left as null for the other orders. Similarly, the company would also enter BucketTruck in the SpecialtyNames field of routes that are driven by trucks with hydraulic booms. It would leave the field null for the other routes. At solve time, the VRP solver assigns orders without special needs to any route, but it only assigns orders that need bucket trucks to routes that have them.</para>
        ///   <para>AssignmentRule:</para>
        ///   <para>This specifies whether or not the route can be used when solving the problem. This field is constrained by a domain of values, and the possible values are the following:
        ///   <bulletList>
        ///     <bullet_item>Include—The route is included in the solve operation. This is the default value.  </bullet_item><para/>
        ///     <bullet_item>Exclude—The route is excluded from the solve operation.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>可用于给定车辆路径问题的路径。路线指定车辆和驾驶员特征;求解后，它还表示仓库和订单之间的路径。</para>
        ///   <para>路线可以有起点和终点站服务时间、固定或灵活的开始时间、基于时间的运营成本、基于距离的运营成本、多种容量、对驾驶员工作日的各种限制等。</para>
        ///   <para>路由记录集具有多个属性。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para>名字：</para>
        ///   <para>路由的名称。名称必须是唯一的。</para>
        ///   <para>如果字段值为 null，则 Network Analyst 会在求解时生成唯一名称。因此，在大多数情况下，输入值是可选的。但是，如果您的分析包括中断、工艺路线续订、工艺路线区域或预先分配给工艺路线的订单，则必须输入名称，因为在这些情况下，工艺路线名称将用作外键。请注意，路由名称不区分大小写。</para>
        ///   <para>StartDepot名称：</para>
        ///   <para>工艺路线的起始仓库的名称。此字段是 Depot 中 Name 字段的外键。</para>
        ///   <para>如果 StartDepotName 值为 null，则路由将从分配的第一个订单开始。当车辆的起始位置未知或与您的问题无关时，省略起始站很有用。但是，当 StartDepotName 为 null 时，EndDepotName 也不能为 null。</para>
        ///   <para>如果订单或仓库位于多个时区，则不允许使用虚拟起始仓库。</para>
        ///   <para>如果工艺路线正在交货且 StartDepotName 为 null，则假定货物在工艺路线开始之前已在虚拟仓库装载到车辆上。对于没有续订访问的工艺路线，其交货订单（订单类中 DeliveryQuantities 值不为零的交货订单）将加载到起始仓库或虚拟仓库。对于具有续订访问的工艺路线，仅在第一次续订访问之前的交货订单加载到起始仓库或虚拟仓库。</para>
        ///   <para>EndDepot名称：</para>
        ///   <para>路线的终点仓库的名称。此字段是 Depots 参数中 Name 字段的外键。</para>
        ///   <para>StartDepotServiceTime：</para>
        ///   <para>起始仓库的服务时间。这可用于对装载车辆所花费的时间进行建模。此字段可以包含 null 值;空值表示零服务时间。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>起点和终点站的服务时间是固定值（由 StartDepotServiceTime 和 EndDepotServiceTime 字段值给出），不考虑路线的实际负载。例如，在起始仓库装载车辆所需的时间可能取决于订单的大小。因此，可以给出与整车或平均整车相对应的仓库服务时间值，或者您可以进行自己的时间估计。</para>
        ///   <para>EndDepotServiceTime：</para>
        ///   <para>终点站的服务时间。这可用于对卸载车辆所花费的时间进行建模。此字段可以包含 null 值;空值表示零服务时间。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>起点和终点站的服务时间是固定值（由 StartDepotServiceTime 和 EndDepotServiceTime 字段值给出），不考虑路线的实际负载。例如，在起始仓库装载车辆所需的时间可能取决于订单的大小。因此，可以给出与整车或平均整车相对应的仓库服务时间值，或者您可以进行自己的时间估计。</para>
        ///   <para>最早的开始时间：</para>
        ///   <para>路线的最早允许开始时间。求解器将其与起始车辆段的时间窗口结合使用，以确定可行的路径起始时间。</para>
        ///   <para>此字段不能包含 null 值，并且默认的仅限时间值为 8：00 a.m.;默认值被解释为默认日期参数（Python 中的default_date）给出的日期的上午 8：00。</para>
        ///   <para>当任何时间窗口字段包含带有时间的日期时，将忽略默认日期。为避免在这种情况下出现错误，请设置“仓库”、“路线”、“订单”和“休息时间”中所有时间窗口的格式，以同时包含日期和时间。</para>
        ///   <para>将网络数据集用于跨多个时区的交通数据时，EarliestStartTime 的时区与起始车辆段所在的边或交汇点的时区相同。</para>
        ///   <para>最新开始时间：</para>
        ///   <para>路线的最晚允许开始时间。此字段不能包含 null 值，并且默认的仅限时间值为 10：00 a.m;默认值被解释为分析图层的默认日期属性所给出的日期的上午 10：00。</para>
        ///   <para>将网络数据集用于跨多个时区的交通数据时，LatestStartTime 的时区与起始车辆段所在的边或交汇点的时区相同。</para>
        ///   <para>到达出发延迟</para>
        ///   <para>此字段存储将车辆加速到正常行驶速度、将其减速到停止以及将其移出网络（例如，进出停车场）所需的行驶时间。通过包含 ArriveDepartDelay 值，VRP 求解器可以阻止发送许多路由来为物理上重合的订单提供服务。</para>
        ///   <para>此属性的费用是在访问非重合订单、仓库和路线续订之间产生的。例如，当路线从仓库出发并访问第一个订单时，总到达/离开延迟将添加到旅行时间中。从一阶到二阶时也是如此。如果第二个和第三个订单重合，则不会在它们之间添加 ArriveDepartDelay 值，因为车辆不需要移动。如果路线行驶到路线续订，则该值将再次添加到旅行时间中。</para>
        ///   <para>尽管车辆需要减速并停下来休息，然后加速，但 VRP 求解器无法为中断添加 ArriveDepartDelay 值。这意味着，如果路线离开订单，停下来休息，然后继续执行下一个订单，则到达/离开延迟仅添加一次，而不是两次。</para>
        ///   <para>举例来说，假设一栋高层建筑中有五个重合的订单，它们由三条不同的路线提供服务。这意味着将产生三次到达/离开延误;也就是说，三名司机需要分别找到停车位并进入同一栋大楼。但是，如果订单只能通过一条路线提供服务，则只需要一名司机停车并进入大楼，只会产生一次到达/离开延迟。由于 VRP 求解器试图最小化成本，因此它将尝试限制到达/离开延迟，从而选择单路径选项。（请注意，当其他约束（如专业、时间窗口或容量）需要时，可能需要发送多个路由。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>能力：</para>
        ///   <para>车辆的最大容量。您可以指定任何维度的容量，例如重量、体积或数量。您甚至可以指定多个维度，例如重量和体积。</para>
        ///   <para>输入容量而不指示单位。例如，假设您的车辆最多可以承载 40,000 磅;您将输入 40000。您需要记住，该值以磅为单位，以备将来参考。</para>
        ///   <para>如果要跟踪多个维度，请用空格分隔数值。例如，如果您同时记录重量和体积，并且您的车辆可以承载 40,000 磅的最大重量和 2,000 立方英尺的最大体积，则容量应输入为 40000 2000。同样，您需要记住单位。您还需要记住输入值及其相应单位的顺序（在本例中为磅后跟立方英尺）。</para>
        ///   <para>记住单位和单位顺序很重要，原因有两个：第一，这样你以后就可以重新解释信息;两个，以便您可以正确输入订单的 DeliveryQuantity 和 PickupQuantity 字段的值。为了详细说明第二点，请注意，VRP 求解器同时引用 Capacities、DeliveryQuantity 和 PickupQuantities，以确保路径不会过载。由于无法在字段中输入单位，因此 Network Analyst 无法进行单位转换，因此您需要使用相同的单位和相同的单位序列输入三个字段的值，以确保正确解释这些值。如果组合单位或更改三个字段中的任何一个字段中的顺序，则将收到不需要的结果，而不会收到警告消息。因此，最好事先设置一个单位和单位序列标准，并在输入这三个字段的值时不断引用它。</para>
        ///   <para>空字符串或 null 值等效于所有值均为零。容量值不能为负数。</para>
        ///   <para>如果 Capacities 字符串与订单的 DeliveryQuantity 或 PickupQuantity 字段相关的值数量不足，则其余值将被视为零。</para>
        ///   <para>
        ///     <para>VRP 求解器仅执行简单的布尔检验，以确定是否超出容量。如果路线的载客量值大于或等于所运载的总量，则 VRP 求解器将假定货物适合车辆。这可能是不正确的，具体取决于货物和车辆的实际形状。例如，VRP 求解器允许您将 1,000 立方英尺的球体装入 8 英尺宽的 1,000 立方英尺卡车中。然而，实际上，由于球体的直径为 12.6 英尺，它不适合 8 英尺宽的卡车。</para>
        ///   </para>
        ///   <para>固定成本：</para>
        ///   <para>一种固定的货币成本，仅当在解决方案中使用工艺路线（即，它已分配订单）时才会产生。此字段可以包含 null 值;空值表示零固定成本。此成本是总路线运营成本的一部分。</para>
        ///   <para>CostPerUnitTime：</para>
        ///   <para>总路线持续时间（包括旅行时间以及订单、仓库和休息时间的服务时间和等待时间）产生的每单位工作时间产生的货币成本。此字段不能包含 null 值，默认值为 1.0。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>CostPerUnitDistance：</para>
        ///   <para>路线长度（总行驶距离）产生的货币成本（每单位行驶距离）。此字段可以包含 null 值;空值表示零成本。</para>
        ///   <para>此字段值的单位由距离字段单位参数指定（对于 Python，distance_units）。</para>
        ///   <para>加班开始时间：</para>
        ///   <para>加班计算开始前的正常工作时间的持续时间。此字段可以包含 null 值;null 值表示不适用加班。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>例如，如果在总路线持续时间超过 8 小时时要向驾驶员支付加班费，则在时间字段单位参数设置为分钟的情况下，将 OvertimeStartTime 指定为 480（8 小时 * 60 分钟/小时）。</para>
        ///   <para>CostPerUnit加班：</para>
        ///   <para>按时间单位加班产生的货币成本。此字段可以包含 null 值;null 值指示 CostPerUnitOvertime 值与 CostPerUnitTime 值相同。</para>
        ///   <para>MaxOrderCount：</para>
        ///   <para>工艺路线上允许的最大订单数。此字段不能包含 null 值，默认值为 30。</para>
        ///   <para>最大总时间：</para>
        ///   <para>允许的最大路由持续时间。路线持续时间包括旅行时间以及订单、仓库和休息时间的服务和等待时间。此字段可以包含 null 值;空值表示对路由持续时间没有约束。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>MaxTotalTravelTime：</para>
        ///   <para>路线的最大允许行驶时间。旅行时间仅包括在网络上行驶的时间，不包括服务或等待时间。</para>
        ///   <para>此字段可以包含 null 值;空值表示对最大允许行驶时间没有限制。此字段值不能大于 MaxTotalTime 字段值。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>最大总距离：</para>
        ///   <para>路线的最大允许行驶距离。</para>
        ///   <para>此字段值的单位由距离字段单位参数指定（对于 Python，distance_units）。</para>
        ///   <para>此字段可以包含 null 值;空值表示对最大允许行驶距离没有约束。</para>
        ///   <para>专业名称：</para>
        ///   <para>一个以空格分隔的字符串，其中包含路由支持的专业的名称。null 值表示路由不支持任何专业。</para>
        ///   <para>此字段是 Orders 参数中 SpecialtyNames 字段的外键。</para>
        ///   <para>为了说明什么是专业以及它们是如何工作的，假设一家草坪护理和树木修剪公司有一部分订单需要铲斗卡车来修剪高大的树木。公司将在这些订单的 SpecialtyNames 字段中输入 BucketTruck，以表明他们的特殊需求。对于其他订单，SpecialtyNames 将保留为 null。同样，该公司还将在由带有液压臂的卡车驾驶的路线的 SpecialtyNames 字段中输入 BucketTruck。对于其他路由，这将使该字段为 null。在求解时，VRP 求解器将没有特殊需求的订单分配给任何路径，但仅将需要铲斗车的订单分配给具有铲斗车的路径。</para>
        ///   <para>分配规则：</para>
        /// <para>这指定在解决问题时是否可以使用路由。此字段受值域的约束，可能的值如下：
        ///   <bulletList>
        ///     <bullet_item>包括—路径包含在求解操作中。这是默认值。 </bullet_item><para/>
        ///     <bullet_item>排除 - 路径已从求解操作中排除。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_time_units">
        /// <para>Time Field Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the time units for all time-based field values in the analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>Seconds—Seconds</bullet_item><para/>
        ///     <bullet_item>Minutes—Minutes</bullet_item><para/>
        ///     <bullet_item>Hours—Hours</bullet_item><para/>
        ///     <bullet_item>Days—Days</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Many features and records in a VRP analysis have fields for storing time values, such as ServiceTime for orders and CostPerUnitTime for routes. To minimize data entry requirements, these field values don't include units. Instead, all distance-based field values must be entered in the same units, and this parameter is used to specify the units of those values.</para>
        ///   <para>Note that output time-based fields use the same units specified by this parameter.</para>
        ///   <para>This time unit doesn't need to match the time unit of the network Time Attribute parameter (time_attribute in Python).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定分析中所有基于时间的字段值的时间单位。</para>
        ///   <bulletList>
        ///     <bullet_item>秒 - 秒</bullet_item><para/>
        ///     <bullet_item>分钟 - 分钟</bullet_item><para/>
        ///     <bullet_item>小时 - 小时</bullet_item><para/>
        ///     <bullet_item>天 - 天</bullet_item><para/>
        ///   </bulletList>
        ///   <para>VRP 分析中的许多要素和记录都具有用于存储时间值的字段，例如订单的 ServiceTime 和工艺路线的 CostPerUnitTime。为了最大程度地减少数据输入要求，这些字段值不包括单位。相反，所有基于距离的字段值必须以相同的单位输入，并且此参数用于指定这些值的单位。</para>
        ///   <para>请注意，基于时间的输出字段使用此参数指定的相同单位。</para>
        ///   <para>此时间单位不需要与网络时间属性参数（Python 中的time_attribute）的时间单位匹配。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_distance_units">
        /// <para>Distance Field Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the distance units for all distance-based field values in the analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>Miles—Miles</bullet_item><para/>
        ///     <bullet_item>Kilometers—Kilometers</bullet_item><para/>
        ///     <bullet_item>Feet—Feet</bullet_item><para/>
        ///     <bullet_item>Yards—Yards</bullet_item><para/>
        ///     <bullet_item>Meters—Meters</bullet_item><para/>
        ///     <bullet_item>Nautical Miles—Nautical miles</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Many features and records in a VRP analysis have fields for storing distance values, such as MaxTotalDistance and CostPerUnitDistance for routes. To minimize data entry requirements, these field values don't include units. Instead, all distance-based field values must be entered in the same units, and this parameter is used to specify the units of those values.</para>
        ///   <para>Note that output distance-based fields use the same units specified by this parameter.</para>
        ///   <para>This distance unit doesn't need to match the distance unit of the network Distance Attribute (distance attribute in Python).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定分析中所有基于距离的字段值的距离单位。</para>
        ///   <bulletList>
        ///     <bullet_item>英里 - 英里</bullet_item><para/>
        ///     <bullet_item>公里 - 公里</bullet_item><para/>
        ///     <bullet_item>英尺 - 英尺</bullet_item><para/>
        ///     <bullet_item>码 - 码</bullet_item><para/>
        ///     <bullet_item>米 - 米</bullet_item><para/>
        ///     <bullet_item>海里—海里</bullet_item><para/>
        ///   </bulletList>
        ///   <para>VRP 分析中的许多要素和记录都具有用于存储距离值的字段，例如路径的 MaxTotalDistance 和 CostPerUnitDistance。为了最大程度地减少数据输入要求，这些字段值不包括单位。相反，所有基于距离的字段值必须以相同的单位输入，并且此参数用于指定这些值的单位。</para>
        ///   <para>请注意，基于距离的输出字段使用此参数指定的相同单位。</para>
        ///   <para>此距离单位不需要与网络距离属性（Python 中的距离属性）的距离单位匹配。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_network_dataset">
        /// <para>Network Dataset</para>
        /// <para>The network dataset on which the vehicle routing problem analysis will be performed. The network dataset must have a time-based cost attribute, since the VRP solver minimizes time.</para>
        /// <para>将对其执行车辆路径问题分析的网络数据集。网络数据集必须具有基于时间的成本属性，因为 VRP 求解器可最大程度地减少时间。</para>
        /// </param>
        /// <param name="_output_workspace_location">
        /// <para>Output Geodatabase Workspace</para>
        /// <para>The file geodatabase or in-memory workspace in which the output feature classes will be created. This workspace must already exist. The default output workspace is in memory.</para>
        /// <para>将在其中创建输出要素类的文件地理数据库或内存中工作空间。此工作区必须已存在。默认输出工作区位于内存中。</para>
        /// </param>
        /// <param name="_output_unassigned_stops_name">
        /// <para>Output Unassigned Stops Name</para>
        /// <para>The name of the output feature class that will contain any unreachable depots or unassigned orders.</para>
        /// <para>将包含任何无法访问的仓库或未分配订单的输出要素类的名称。</para>
        /// </param>
        /// <param name="_output_stops_name">
        /// <para>Output Stops Name</para>
        /// <para>The name of the feature class that will contain the stops visited by routes. This feature class includes stops at depots, orders, and breaks.</para>
        /// <para>将包含路径访问的停靠点的要素类的名称。此要素类包括停靠点、订单和停靠点。</para>
        /// </param>
        /// <param name="_output_routes_name">
        /// <para>Output Routes Name</para>
        /// <para>The name of the feature class that will contain the routes of the analysis.</para>
        /// <para>将包含分析路径的要素类的名称。</para>
        /// </param>
        /// <param name="_output_directions_name">
        /// <para>Output Directions Name</para>
        /// <para>The name of the feature class that will contain the directions for the routes.</para>
        /// <para>将包含路径方向的要素类的名称。</para>
        /// </param>
        public SolveVehicleRoutingProblem(object _orders, object _depots, object _routes, _time_units_value _time_units, _distance_units_value _distance_units, object _network_dataset, object _output_workspace_location, object _output_unassigned_stops_name, object _output_stops_name, object _output_routes_name, object _output_directions_name)
        {
            this._orders = _orders;
            this._depots = _depots;
            this._routes = _routes;
            this._time_units = _time_units;
            this._distance_units = _distance_units;
            this._network_dataset = _network_dataset;
            this._output_workspace_location = _output_workspace_location;
            this._output_unassigned_stops_name = _output_unassigned_stops_name;
            this._output_stops_name = _output_stops_name;
            this._output_routes_name = _output_routes_name;
            this._output_directions_name = _output_directions_name;
        }
        public override string ToolboxName => "Network Analyst Tools";

        public override string ToolName => "Solve Vehicle Routing Problem";

        public override string CallName => "na.SolveVehicleRoutingProblem";

        public override List<string> AcceptEnvironments => ["outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_orders, _depots, _routes, _breaks, _time_units.GetGPValue(), _distance_units.GetGPValue(), _network_dataset, _output_workspace_location, _output_unassigned_stops_name, _output_stops_name, _output_routes_name, _output_directions_name, _default_date, _uturn_policy.GetGPValue(), _time_window_factor.GetGPValue(), _spatially_cluster_routes.GetGPValue(), _route_zones, _route_renewals, _order_pairs, _excess_transit_factor.GetGPValue(), _point_barriers, _line_barriers, _polygon_barriers, _time_attribute, _distance_attribute, _use_hierarchy_in_analysis.GetGPValue(), _restrictions, _attribute_parameter_values, _maximum_snap_tolerance, _exclude_restricted_portions_of_the_network.GetGPValue(), _feature_locator_where_clause, _populate_route_lines.GetGPValue(), _route_line_simplification_tolerance, _populate_directions.GetGPValue(), _directions_language, _directions_style_name.GetGPValue(), _save_output_layer.GetGPValue(), _service_capabilities, _ignore_invalid_order_locations.GetGPValue(), _travel_mode, _solve_succeeded, _out_unassigned_stops, _out_stops, _out_routes, _out_directions, _out_network_analysis_layer, _ignore_network_location_fields.GetGPValue(), _time_zone_usage_for_time_fields.GetGPValue(), _overrides, _save_route_data.GetGPValue(), _out_route_data];

        /// <summary>
        /// <para>Orders</para>
        /// <para>In the case of an exchange visit, an order can have both delivery and pickup quantities.</para>
        /// <para>在交换访问的情况下，订单可以同时具有交货数量和取货数量。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Orders")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _orders { get; set; }


        /// <summary>
        /// <para>Depots</para>
        /// <para><xdoc>
        ///   <para>A depot is a location that a vehicle departs from at the beginning of the workday and returns to at the end of the workday. Vehicles are loaded (for deliveries) or unloaded (for pickups) at depots at the start of the route. In some cases, a depot can also act as a renewal location, whereby the vehicle can unload or reload and continue performing deliveries and pickups. A depot has open and close times, as specified by a hard time window. Vehicles can't arrive at a depot outside of this time window.</para>
        ///   <para>The depots feature set has an associated attribute table. The fields in the attribute table are listed and described below.</para>
        ///   <para>ObjectID:</para>
        ///   <para>The system-managed ID field.</para>
        ///   <para>Shape:</para>
        ///   <para>The geometry field indicating the geographic location of the network analysis object.</para>
        ///   <para>Name:</para>
        ///   <para>The name of the depot. The StartDepotName and EndDepotName fields of the routes record set reference the names you specify here. It is also referenced by the route renewals record set, when used.</para>
        ///   <para>Depot names are not case sensitive and must be nonempty and unique.</para>
        ///   <para>TimeWindowStart1:</para>
        ///   <para>The beginning time of the first time window for the network location. This field can contain a null value; a null value indicates no beginning time.</para>
        ///   <bulletList>
        ///     <bullet_item>
        ///       <para>Time window fields can contain a time-only value or a date and time value. If a time field has a time-only value (for example, 8:00 a.m.), the date is assumed to be the date specified by the Default Date parameter of the analysis layer. Using date and time values (for example, 7/11/2010 8:00 a.m.) allows you to set time windows that span multiple days.</para>
        ///     </bullet_item><para/>
        ///     <bullet_item>
        ///       <para>The default date is ignored when any time window field includes a date with the time. To avoid an error in this situation, format all time windows in Depots, Routes, Orders, and Breaks to also include the date with the time.</para>
        ///     </bullet_item><para/>
        ///     <bullet_item>
        ///       <para>If you're using traffic data, the time-of-day fields for the network location always reference the same time zone as the edge on which the network location is located.</para>
        ///     </bullet_item><para/>
        ///   </bulletList>
        ///   <para>TimeWindowEnd1:</para>
        ///   <para>The ending time of the first time window for the network location. This field can contain a null value; a null value indicates no ending time.</para>
        ///   <para>TimeWindowStart2:</para>
        ///   <para>The beginning time of the second time window for the network location. This field can contain a null value; a null value indicates that there is no second time window.</para>
        ///   <para>If the first time window is null as specified by the TimeWindowStart1 and TimeWindowEnd1 fields, the second time window must also be null.</para>
        ///   <para>If both time windows are nonnull, they can't overlap. Also, the second time window must occur after the first.</para>
        ///   <para>TimeWindowEnd2:</para>
        ///   <para>The ending time of the second time window for the network location. This field can contain a null value.</para>
        ///   <para>When TimeWindowStart2 and TimeWindowEnd2 are both null, there is no second time window.</para>
        ///   <para>When TimeWindowStart2 is not null but TimeWindowEnd2 is null, there is a second time window that has a starting time but no ending time. This is valid.</para>
        ///   <para>CurbApproach:</para>
        ///   <para>The CurbApproach property specifies the direction a vehicle may arrive at and depart from the network location. There are four choices (their coded values are shown in parentheses):
        ///   <bulletList>
        ///     <bullet_item>Either side of vehicle (0)—The vehicle can approach and depart the network location in either direction. U-turns are allowed. You should choose this setting if your vehicle can make a U-turn at the stop or if it can pull into a driveway or parking lot and turn around.  </bullet_item><para/>
        ///     <bullet_item>Right side of vehicle (1)—When the vehicle approaches and departs the network location, the curb must be on the right side of the vehicle. A U-turn is prohibited.  </bullet_item><para/>
        ///     <bullet_item>Left side of vehicle (2)—When the vehicle approaches and departs the network location, the curb must be on the left side of the vehicle. A U-turn is prohibited.  </bullet_item><para/>
        ///     <bullet_item>No U-Turn (3)—When the vehicle approaches the network location, the curb can be on either side of the vehicle; however, the vehicle must depart without turning around.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Bearing:</para>
        ///   <para>The direction in which a point is moving. The units are degrees and are measured in a clockwise fashion from true north. This field is used in conjunction with the BearingTol field.</para>
        ///   <para>Bearing data is usually sent automatically from a mobile device that is equipped with a GPS receiver. Try to include bearing data if you are loading an order that is moving, such as a pedestrian or a vehicle.</para>
        ///   <para>Using this field tends to prevent adding locations to the wrong edges, which can occur when a vehicle is near an intersection or an overpass, for example. Bearing also helps Network Analyst determine which side of the street the point is on.</para>
        ///   <para>For more information, see Bearing and BearingTol.</para>
        ///   <para>BearingTol:</para>
        ///   <para>The bearing tolerance value creates a range of acceptable bearing values when locating moving points on an edge using the Bearing field. If the value from the Bearing field is within the range of acceptable values that are generated from the bearing tolerance on an edge, the point can be added as a network location there; otherwise, the closest point on the next-nearest edge is evaluated.</para>
        ///   <para>The units are in degrees, and the default value is 30. Values must be greater than zero and less than 180.</para>
        ///   <para>A value of 30 means that when Network Analyst attempts to add a network location on an edge, a range of acceptable bearing values is generated 15º to either side of the edge (left and right) and in both digitized directions of the edge.</para>
        ///   <para>For more information, see Bearing and BearingTol.</para>
        ///   <para>NavLatency:</para>
        ///   <para>This field is only used in the solve process if Bearing and BearingTol also have values; however, entering a NavLatency value is optional, even when values are present in Bearing and BearingTol. NavLatency indicates how much time is expected to elapse from the moment GPS information is sent from a moving vehicle to a server and the moment the processed route is received by the vehicle's navigation device. The time units of NavLatency are the same as the units of the cost attribute specified by the Time Attribute parameter.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>仓库是车辆在工作日开始时出发并在工作日结束时返回的位置。车辆在路线起点的仓库装货（用于送货）或卸货（用于取货）。在某些情况下，仓库还可以充当更新位置，车辆可以卸载或重新装载并继续执行交付和取货。仓库有开放和关闭时间，由硬时间窗口指定。车辆无法在此时间窗口之外到达仓库。</para>
        ///   <para>depot 要素集具有关联的属性表。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para>对象 ID：</para>
        ///   <para>系统管理的 ID 字段。</para>
        ///   <para>形状：</para>
        ///   <para>指示网络分析对象的地理位置的几何字段。</para>
        ///   <para>名字：</para>
        ///   <para>仓库的名称。路由记录集的 StartDepotName 和 EndDepotName 字段引用您在此处指定的名称。使用时，路由续订记录集也会引用它。</para>
        ///   <para>仓库名称不区分大小写，必须为非空且唯一。</para>
        ///   <para>时间窗口开始1：</para>
        ///   <para>网络位置的第一个时间窗口的开始时间。此字段可以包含 null 值;null 值表示没有开始时间。</para>
        ///   <bulletList>
        ///     <bullet_item>
        ///       <para>时间窗口字段可以包含仅时间值或日期和时间值。如果时间字段具有仅时间值（例如，上午 8：00），则假定该日期为分析图层的默认日期参数指定的日期。使用日期和时间值（例如，2010 年 7 月 11 日上午 8：00）可以设置跨多天的时间窗口。</para>
        ///     </bullet_item><para/>
        ///     <bullet_item>
        ///       <para>当任何时间窗口字段包含带有时间的日期时，将忽略默认日期。为避免在这种情况下出现错误，请设置“仓库”、“路线”、“订单”和“休息时间”中所有时间窗口的格式，以同时包含日期和时间。</para>
        ///     </bullet_item><para/>
        ///     <bullet_item>
        ///       <para>如果使用流量数据，则网络位置的时间字段始终引用与网络位置所在的边相同的时区。</para>
        ///     </bullet_item><para/>
        ///   </bulletList>
        ///   <para>时间窗口结束1：</para>
        ///   <para>网络位置的第一个时间窗口的结束时间。此字段可以包含 null 值;null 值表示没有结束时间。</para>
        ///   <para>时间窗口开始2：</para>
        ///   <para>网络位置的第二个时间窗口的开始时间。此字段可以包含 null 值;null 值表示没有第二个时间窗口。</para>
        ///   <para>如果 TimeWindowStart1 和 TimeWindowEnd1 字段指定的第一个时间窗口为 null，则第二个时间窗口也必须为 null。</para>
        ///   <para>如果两个时间窗口均为非空值，则它们不能重叠。此外，第二个时间窗口必须发生在第一个时间窗口之后。</para>
        ///   <para>时间窗口结束2：</para>
        ///   <para>网络位置的第二个时间窗口的结束时间。此字段可以包含 null 值。</para>
        ///   <para>当 TimeWindowStart2 和 TimeWindowEnd2 均为 null 时，没有第二个时间窗口。</para>
        ///   <para>当 TimeWindowStart2 不为 null 但 TimeWindowEnd2 为 null 时，存在第二个时间窗口，该时间窗口具有开始时间但没有结束时间。这是有效的。</para>
        ///   <para>遏制方法：</para>
        /// <para>CurbApproach 属性指定车辆可能到达和离开网络位置的方向。有四个选项（其编码值显示在括号中）：
        ///   <bulletList>
        ///     <bullet_item>车辆 （0） 的任一侧 - 车辆可以在任一方向上接近和离开网络位置。允许掉头。如果您的车辆可以在停车处掉头，或者可以驶入车道或停车场并掉头，则应选择此设置。 </bullet_item><para/>
        ///     <bullet_item>车辆右侧 （1） - 当车辆接近和离开网络位置时，路缘必须位于车辆的右侧。禁止掉头。 </bullet_item><para/>
        ///     <bullet_item>车辆左侧 （2） - 当车辆接近和离开网络位置时，路缘必须位于车辆的左侧。禁止掉头。 </bullet_item><para/>
        ///     <bullet_item>无掉头 （3） - 当车辆接近网络位置时，路缘可以位于车辆的任一侧;但是，车辆必须在不掉头的情况下离开。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>轴承：</para>
        ///   <para>点移动的方向。单位是度数，从正北开始按顺时针方向测量。此字段与 BearingTol 字段结合使用。</para>
        ///   <para>轴承数据通常从配备 GPS 接收器的移动设备自动发送。如果您要加载正在移动的订单（例如行人或车辆），请尝试包含方位角数据。</para>
        ///   <para>使用此字段可以防止将位置添加到错误的边缘，例如，当车辆靠近交叉路口或立交桥时，可能会发生这种情况。方位角还有助于 Network Analyst 确定点位于街道的哪一侧。</para>
        ///   <para>有关详细信息，请参阅轴承和轴承Tol。</para>
        ///   <para>轴承Tol：</para>
        ///   <para>当使用“轴承”（Bearing） 场在边上定位移动点时，轴承公差值会创建可接受的轴承值范围。如果“方位角”（Bear） 场中的值在边上的方位公差生成的可接受值范围内，则可以将该点添加为该点作为网络位置;否则，将计算下一个最近边上的最近点。</para>
        ///   <para>单位以度为单位，默认值为 30。值必须大于零且小于 180。</para>
        ///   <para>值 30 表示当 Network Analyst 尝试在边上添加网络位置时，将在边的任一侧（左侧和右侧）以及边的两个数字化方向上生成一系列可接受的方位角值。</para>
        ///   <para>有关详细信息，请参阅轴承和轴承Tol。</para>
        ///   <para>NavLatency：</para>
        ///   <para>仅当 Bearing 和 BearingTol 也具有值时，此字段才用于求解过程;但是，输入 NavLatency 值是可选的，即使 Bearing 和 BearingTol 中存在值也是如此。NavLatency 表示从 GPS 信息从移动车辆发送到服务器的那一刻到车辆的导航设备接收到处理路线的那一刻，预计要经过多少时间。NavLatency 的时间单位与 Time Attribute 参数指定的成本属性的单位相同。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Depots")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _depots { get; set; }


        /// <summary>
        /// <para>Routes</para>
        /// <para><xdoc>
        ///   <para>The routes that are available for the given vehicle routing problem. A route specifies vehicle and driver characteristics; after solving, it also represents the path between depots and orders.</para>
        ///   <para>A route can have start and end depot service times, a fixed or flexible starting time, time-based operating costs, distance-based operating costs, multiple capacities, various constraints on a driver's workday, and so on.</para>
        ///   <para>The routes record set has several attributes. The fields in the attribute table are listed and described below.</para>
        ///   <para>Name:</para>
        ///   <para>The name of the route. The name must be unique.</para>
        ///   <para>Network Analyst generates a unique name at solve time if the field value is null. Therefore, entering a value is optional in most cases. However, you must enter a name if your analysis includes breaks, route renewals, route zones, or orders that are preassigned to a route, because the route name is used as a foreign key in these cases. Note that route names are not case sensitive.</para>
        ///   <para>StartDepotName:</para>
        ///   <para>The name of the starting depot for the route. This field is a foreign key to the Name field in Depots.</para>
        ///   <para>If the StartDepotName value is null, the route will begin from the first order assigned. Omitting the start depot is useful when the vehicle's starting location is unknown or irrelevant to your problem. However, when StartDepotName is null, EndDepotName cannot also be null.</para>
        ///   <para>Virtual start depots are not allowed if orders or depots are in multiple time zones.</para>
        ///   <para>If the route is making deliveries and StartDepotName is null, it is assumed the cargo is loaded on the vehicle at a virtual depot before the route begins. For a route that has no renewal visits, its delivery orders (those with nonzero DeliveryQuantities values in the Orders class) are loaded at the start depot or virtual depot. For a route that has renewal visits, only the delivery orders before the first renewal visit are loaded at the start depot or virtual depot.</para>
        ///   <para>EndDepotName:</para>
        ///   <para>The name of the ending depot for the route. This field is a foreign key to the Name field in the Depots parameter.</para>
        ///   <para>StartDepotServiceTime:</para>
        ///   <para>The service time at the starting depot. This can be used to model the time spent for loading the vehicle. This field can contain a null value; a null value indicates zero service time.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>The service times at the start and end depots are fixed values (given by the StartDepotServiceTime and EndDepotServiceTime field values) and do not take into account the actual load for a route. For example, the time taken to load a vehicle at the starting depot may depend on the size of the orders. As such, the depot service times could be given values corresponding to a full truckload or an average truckload, or you could make your own time estimate.</para>
        ///   <para>EndDepotServiceTime:</para>
        ///   <para>The service time at the ending depot. This can be used to model the time spent for unloading the vehicle. This field can contain a null value; a null value indicates zero service time.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>The service times at the start and end depots are fixed values (given by the StartDepotServiceTime and EndDepotServiceTime field values) and do not take into account the actual load for a route. For example, the time taken to load a vehicle at the starting depot may depend on the size of the orders. As such, the depot service times could be given values corresponding to a full truckload or an average truckload, or you could make your own time estimate.</para>
        ///   <para>EarliestStartTime:</para>
        ///   <para>The earliest allowable starting time for the route. This is used by the solver in conjunction with the time window of the starting depot for determining feasible route start times.</para>
        ///   <para>This field can't contain null values and has a default time-only value of 8:00 a.m.; the default value is interpreted as 8:00 a.m. on the date given by the Default Date parameter (default_date in Python).</para>
        ///   <para>The default date is ignored when any time window field includes a date with the time. To avoid an error in this situation, format all time windows in Depots, Routes, Orders, and Breaks to also include the date with the time.</para>
        ///   <para>When using network datasets with traffic data across multiple time zones, the time zone for EarliestStartTime is the same as the time zone of the edge or junction on which the starting depot is located.</para>
        ///   <para>LatestStartTime:</para>
        ///   <para>The latest allowable starting time for the route. This field can't contain null values and has a default time-only value of 10:00 a.m; the default value is interpreted as 10:00 a.m. on the date given by the Default Date property of the analysis layer.</para>
        ///   <para>When using network datasets with traffic data across multiple time zones, the time zone for LatestStartTime is the same as the time zone of the edge or junction on which the starting depot is located.</para>
        ///   <para>ArriveDepartDelay</para>
        ///   <para>This field stores the amount of travel time needed to accelerate the vehicle to normal travel speeds, decelerate it to a stop, and move it off and on the network (for example, in and out of parking). By including an ArriveDepartDelay value, the VRP solver is deterred from sending many routes to service physically coincident orders.</para>
        ///   <para>The cost for this property is incurred between visits to noncoincident orders, depots, and route renewals. For example, when a route starts from a depot and visits the first order, the total arrive/depart delay is added to the travel time. The same is true when traveling from the first order to the second order. If the second and third orders are coincident, the ArriveDepartDelay value is not added between them since the vehicle doesn't need to move. If the route travels to a route renewal, the value is added to the travel time again.</para>
        ///   <para>Although a vehicle needs to slow down and stop for a break and accelerate afterward, the VRP solver cannot add the ArriveDepartDelay value for breaks. This means that if a route leaves an order, stops for a break, and continues to the next order, the arrive/depart delay is added only once, not twice.</para>
        ///   <para>To illustrate, assume there are five coincident orders in a high-rise building, and they are serviced by three different routes. This means three arrive/depart delays would be incurred; that is, three drivers would need to separately find parking places and enter the same building. However, if the orders could be serviced by just one route instead, only one driver would need to park and enter the building—only one arrive/depart delay would be incurred. Since the VRP solver tries to minimize cost, it will try to limit the arrive/depart delays and thus choose the single-route option. (Note that multiple routes may need to be sent when other constraints—such as specialties, time windows, or capacities—require it.)</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>Capacities:</para>
        ///   <para>The maximum capacity of the vehicle. You can specify capacity in any dimension, such as weight, volume, or quantity. You can even specify multiple dimensions, for example, weight and volume.</para>
        ///   <para>Enter capacities without indicating units. For example, assume your vehicle can carry a maximum of 40,000 pounds; you would enter 40000. You need to remember for future reference that the value is in pounds.</para>
        ///   <para>If you are tracking multiple dimensions, separate the numeric values with a space. For instance, if you are recording both weight and volume and your vehicle can carry a maximum weight of 40,000 pounds and a maximum volume of 2,000 cubic feet, Capacities should be entered as 40000 2000. Again, you need to remember the units. You also need to remember the sequence the values and their corresponding units are entered (pounds followed by cubic feet in this case).</para>
        ///   <para>Remembering the units and the unit sequence is important for a couple of reasons: one, so you can reinterpret the information later; two, so you can properly enter values for the DeliveryQuantities and PickupQuantities fields for Orders. To elaborate on the second point, note that the VRP solver simultaneously refers to Capacities, DeliveryQuantities, and PickupQuantities to make sure that a route doesn't become overloaded. Since units can't be entered in the field, Network Analyst can't make unit conversions, so you need to enter the values for the three fields using the same units and the same unit sequence to ensure that the values are correctly interpreted. If you combine units or change the sequence in any of the three fields, you will get unwanted results without receiving a warning messages. Thus, it is a good idea to set up a unit and unit-sequence standard beforehand and continually refer to it whenever entering values for these three fields.</para>
        ///   <para>An empty string or null value is equivalent to all values being zero. Capacity values can't be negative.</para>
        ///   <para>If the Capacities string has an insufficient number of values in relation to the DeliveryQuantities or PickupQuantities field for orders, the remaining values are treated as zero.</para>
        ///   <para>
        ///     <para>The VRP solver only performs a simple Boolean test to determine whether capacities are exceeded. If a route's capacity value is greater than or equal to the total quantity being carried, the VRP solver will assume the cargo fits in the vehicle. This could be incorrect, depending on the actual shape of the cargo and the vehicle. For example, the VRP solver allows you to fit a 1,000-cubic-foot sphere into a 1,000-cubic-foot truck that is 8 feet wide. In reality, however, since the sphere is 12.6 feet in diameter, it won't fit in the 8-foot-wide truck.</para>
        ///   </para>
        ///   <para>FixedCost:</para>
        ///   <para>A fixed monetary cost that is incurred only if the route is used in a solution (that is, it has orders assigned to it). This field can contain null values; a null value indicates zero fixed cost. This cost is part of the total route operating cost.</para>
        ///   <para>CostPerUnitTime:</para>
        ///   <para>The monetary cost incurred—per unit of work time—for the total route duration, including travel times as well as service times and wait times at orders, depots, and breaks. This field can't contain a null value and has a default value of 1.0.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>CostPerUnitDistance:</para>
        ///   <para>The monetary cost incurred—per unit of distance traveled—for the route length (total travel distance). This field can contain null values; a null value indicates zero cost.</para>
        ///   <para>The unit for this field value is specified by the Distance Field Units parameter (distance_units for Python).</para>
        ///   <para>OvertimeStartTime:</para>
        ///   <para>The duration of regular work time before overtime computation begins. This field can contain null values; a null value indicates that overtime does not apply.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>For example, if the driver is to be paid overtime when the total route duration extends beyond eight hours, OvertimeStartTime is specified as 480 (8 hours * 60 minutes/hour), given the Time Field Units parameter is set to Minutes.</para>
        ///   <para>CostPerUnitOvertime:</para>
        ///   <para>The monetary cost incurred per time unit of overtime work. This field can contain null values; a null value indicates that the CostPerUnitOvertime value is the same as the CostPerUnitTime value.</para>
        ///   <para>MaxOrderCount:</para>
        ///   <para>The maximum allowable number of orders on the route. This field can't contain null values and has a default value of 30.</para>
        ///   <para>MaxTotalTime:</para>
        ///   <para>The maximum allowable route duration. The route duration includes travel times as well as service and wait times at orders, depots, and breaks. This field can contain null values; a null value indicates that there is no constraint on the route duration.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>MaxTotalTravelTime:</para>
        ///   <para>The maximum allowable travel time for the route. The travel time includes only the time spent driving on the network and does not include service or wait times.</para>
        ///   <para>This field can contain null values; a null value indicates there is no constraint on the maximum allowable travel time. This field value can't be larger than the MaxTotalTime field value.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>MaxTotalDistance:</para>
        ///   <para>The maximum allowable travel distance for the route.</para>
        ///   <para>The unit for this field value is specified by the Distance Field Units parameter (distance_units for Python).</para>
        ///   <para>This field can contain null values; a null value indicates that there is no constraint on the maximum allowable travel distance.</para>
        ///   <para>SpecialtyNames:</para>
        ///   <para>A space-separated string containing the names of the specialties supported by the route. A null value indicates that the route does not support any specialties.</para>
        ///   <para>This field is a foreign key to the SpecialtyNames field in the Orders parameter.</para>
        ///   <para>To illustrate what specialties are and how they work, assume a lawn care and tree trimming company has a portion of its orders that requires a bucket truck to trim tall trees. The company would enter BucketTruck in the SpecialtyNames field for these orders to indicate their special need. SpecialtyNames would be left as null for the other orders. Similarly, the company would also enter BucketTruck in the SpecialtyNames field of routes that are driven by trucks with hydraulic booms. It would leave the field null for the other routes. At solve time, the VRP solver assigns orders without special needs to any route, but it only assigns orders that need bucket trucks to routes that have them.</para>
        ///   <para>AssignmentRule:</para>
        ///   <para>This specifies whether or not the route can be used when solving the problem. This field is constrained by a domain of values, and the possible values are the following:
        ///   <bulletList>
        ///     <bullet_item>Include—The route is included in the solve operation. This is the default value.  </bullet_item><para/>
        ///     <bullet_item>Exclude—The route is excluded from the solve operation.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>可用于给定车辆路径问题的路径。路线指定车辆和驾驶员特征;求解后，它还表示仓库和订单之间的路径。</para>
        ///   <para>路线可以有起点和终点站服务时间、固定或灵活的开始时间、基于时间的运营成本、基于距离的运营成本、多种容量、对驾驶员工作日的各种限制等。</para>
        ///   <para>路由记录集具有多个属性。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para>名字：</para>
        ///   <para>路由的名称。名称必须是唯一的。</para>
        ///   <para>如果字段值为 null，则 Network Analyst 会在求解时生成唯一名称。因此，在大多数情况下，输入值是可选的。但是，如果您的分析包括中断、工艺路线续订、工艺路线区域或预先分配给工艺路线的订单，则必须输入名称，因为在这些情况下，工艺路线名称将用作外键。请注意，路由名称不区分大小写。</para>
        ///   <para>StartDepot名称：</para>
        ///   <para>工艺路线的起始仓库的名称。此字段是 Depot 中 Name 字段的外键。</para>
        ///   <para>如果 StartDepotName 值为 null，则路由将从分配的第一个订单开始。当车辆的起始位置未知或与您的问题无关时，省略起始站很有用。但是，当 StartDepotName 为 null 时，EndDepotName 也不能为 null。</para>
        ///   <para>如果订单或仓库位于多个时区，则不允许使用虚拟起始仓库。</para>
        ///   <para>如果工艺路线正在交货且 StartDepotName 为 null，则假定货物在工艺路线开始之前已在虚拟仓库装载到车辆上。对于没有续订访问的工艺路线，其交货订单（订单类中 DeliveryQuantities 值不为零的交货订单）将加载到起始仓库或虚拟仓库。对于具有续订访问的工艺路线，仅在第一次续订访问之前的交货订单加载到起始仓库或虚拟仓库。</para>
        ///   <para>EndDepot名称：</para>
        ///   <para>路线的终点仓库的名称。此字段是 Depots 参数中 Name 字段的外键。</para>
        ///   <para>StartDepotServiceTime：</para>
        ///   <para>起始仓库的服务时间。这可用于对装载车辆所花费的时间进行建模。此字段可以包含 null 值;空值表示零服务时间。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>起点和终点站的服务时间是固定值（由 StartDepotServiceTime 和 EndDepotServiceTime 字段值给出），不考虑路线的实际负载。例如，在起始仓库装载车辆所需的时间可能取决于订单的大小。因此，可以给出与整车或平均整车相对应的仓库服务时间值，或者您可以进行自己的时间估计。</para>
        ///   <para>EndDepotServiceTime：</para>
        ///   <para>终点站的服务时间。这可用于对卸载车辆所花费的时间进行建模。此字段可以包含 null 值;空值表示零服务时间。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>起点和终点站的服务时间是固定值（由 StartDepotServiceTime 和 EndDepotServiceTime 字段值给出），不考虑路线的实际负载。例如，在起始仓库装载车辆所需的时间可能取决于订单的大小。因此，可以给出与整车或平均整车相对应的仓库服务时间值，或者您可以进行自己的时间估计。</para>
        ///   <para>最早的开始时间：</para>
        ///   <para>路线的最早允许开始时间。求解器将其与起始车辆段的时间窗口结合使用，以确定可行的路径起始时间。</para>
        ///   <para>此字段不能包含 null 值，并且默认的仅限时间值为 8：00 a.m.;默认值被解释为默认日期参数（Python 中的default_date）给出的日期的上午 8：00。</para>
        ///   <para>当任何时间窗口字段包含带有时间的日期时，将忽略默认日期。为避免在这种情况下出现错误，请设置“仓库”、“路线”、“订单”和“休息时间”中所有时间窗口的格式，以同时包含日期和时间。</para>
        ///   <para>将网络数据集用于跨多个时区的交通数据时，EarliestStartTime 的时区与起始车辆段所在的边或交汇点的时区相同。</para>
        ///   <para>最新开始时间：</para>
        ///   <para>路线的最晚允许开始时间。此字段不能包含 null 值，并且默认的仅限时间值为 10：00 a.m;默认值被解释为分析图层的默认日期属性所给出的日期的上午 10：00。</para>
        ///   <para>将网络数据集用于跨多个时区的交通数据时，LatestStartTime 的时区与起始车辆段所在的边或交汇点的时区相同。</para>
        ///   <para>到达出发延迟</para>
        ///   <para>此字段存储将车辆加速到正常行驶速度、将其减速到停止以及将其移出网络（例如，进出停车场）所需的行驶时间。通过包含 ArriveDepartDelay 值，VRP 求解器可以阻止发送许多路由来为物理上重合的订单提供服务。</para>
        ///   <para>此属性的费用是在访问非重合订单、仓库和路线续订之间产生的。例如，当路线从仓库出发并访问第一个订单时，总到达/离开延迟将添加到旅行时间中。从一阶到二阶时也是如此。如果第二个和第三个订单重合，则不会在它们之间添加 ArriveDepartDelay 值，因为车辆不需要移动。如果路线行驶到路线续订，则该值将再次添加到旅行时间中。</para>
        ///   <para>尽管车辆需要减速并停下来休息，然后加速，但 VRP 求解器无法为中断添加 ArriveDepartDelay 值。这意味着，如果路线离开订单，停下来休息，然后继续执行下一个订单，则到达/离开延迟仅添加一次，而不是两次。</para>
        ///   <para>举例来说，假设一栋高层建筑中有五个重合的订单，它们由三条不同的路线提供服务。这意味着将产生三次到达/离开延误;也就是说，三名司机需要分别找到停车位并进入同一栋大楼。但是，如果订单只能通过一条路线提供服务，则只需要一名司机停车并进入大楼，只会产生一次到达/离开延迟。由于 VRP 求解器试图最小化成本，因此它将尝试限制到达/离开延迟，从而选择单路径选项。（请注意，当其他约束（如专业、时间窗口或容量）需要时，可能需要发送多个路由。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>能力：</para>
        ///   <para>车辆的最大容量。您可以指定任何维度的容量，例如重量、体积或数量。您甚至可以指定多个维度，例如重量和体积。</para>
        ///   <para>输入容量而不指示单位。例如，假设您的车辆最多可以承载 40,000 磅;您将输入 40000。您需要记住，该值以磅为单位，以备将来参考。</para>
        ///   <para>如果要跟踪多个维度，请用空格分隔数值。例如，如果您同时记录重量和体积，并且您的车辆可以承载 40,000 磅的最大重量和 2,000 立方英尺的最大体积，则容量应输入为 40000 2000。同样，您需要记住单位。您还需要记住输入值及其相应单位的顺序（在本例中为磅后跟立方英尺）。</para>
        ///   <para>记住单位和单位顺序很重要，原因有两个：第一，这样你以后就可以重新解释信息;两个，以便您可以正确输入订单的 DeliveryQuantity 和 PickupQuantity 字段的值。为了详细说明第二点，请注意，VRP 求解器同时引用 Capacities、DeliveryQuantity 和 PickupQuantities，以确保路径不会过载。由于无法在字段中输入单位，因此 Network Analyst 无法进行单位转换，因此您需要使用相同的单位和相同的单位序列输入三个字段的值，以确保正确解释这些值。如果组合单位或更改三个字段中的任何一个字段中的顺序，则将收到不需要的结果，而不会收到警告消息。因此，最好事先设置一个单位和单位序列标准，并在输入这三个字段的值时不断引用它。</para>
        ///   <para>空字符串或 null 值等效于所有值均为零。容量值不能为负数。</para>
        ///   <para>如果 Capacities 字符串与订单的 DeliveryQuantity 或 PickupQuantity 字段相关的值数量不足，则其余值将被视为零。</para>
        ///   <para>
        ///     <para>VRP 求解器仅执行简单的布尔检验，以确定是否超出容量。如果路线的载客量值大于或等于所运载的总量，则 VRP 求解器将假定货物适合车辆。这可能是不正确的，具体取决于货物和车辆的实际形状。例如，VRP 求解器允许您将 1,000 立方英尺的球体装入 8 英尺宽的 1,000 立方英尺卡车中。然而，实际上，由于球体的直径为 12.6 英尺，它不适合 8 英尺宽的卡车。</para>
        ///   </para>
        ///   <para>固定成本：</para>
        ///   <para>一种固定的货币成本，仅当在解决方案中使用工艺路线（即，它已分配订单）时才会产生。此字段可以包含 null 值;空值表示零固定成本。此成本是总路线运营成本的一部分。</para>
        ///   <para>CostPerUnitTime：</para>
        ///   <para>总路线持续时间（包括旅行时间以及订单、仓库和休息时间的服务时间和等待时间）产生的每单位工作时间产生的货币成本。此字段不能包含 null 值，默认值为 1.0。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>CostPerUnitDistance：</para>
        ///   <para>路线长度（总行驶距离）产生的货币成本（每单位行驶距离）。此字段可以包含 null 值;空值表示零成本。</para>
        ///   <para>此字段值的单位由距离字段单位参数指定（对于 Python，distance_units）。</para>
        ///   <para>加班开始时间：</para>
        ///   <para>加班计算开始前的正常工作时间的持续时间。此字段可以包含 null 值;null 值表示不适用加班。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>例如，如果在总路线持续时间超过 8 小时时要向驾驶员支付加班费，则在时间字段单位参数设置为分钟的情况下，将 OvertimeStartTime 指定为 480（8 小时 * 60 分钟/小时）。</para>
        ///   <para>CostPerUnit加班：</para>
        ///   <para>按时间单位加班产生的货币成本。此字段可以包含 null 值;null 值指示 CostPerUnitOvertime 值与 CostPerUnitTime 值相同。</para>
        ///   <para>MaxOrderCount：</para>
        ///   <para>工艺路线上允许的最大订单数。此字段不能包含 null 值，默认值为 30。</para>
        ///   <para>最大总时间：</para>
        ///   <para>允许的最大路由持续时间。路线持续时间包括旅行时间以及订单、仓库和休息时间的服务和等待时间。此字段可以包含 null 值;空值表示对路由持续时间没有约束。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>MaxTotalTravelTime：</para>
        ///   <para>路线的最大允许行驶时间。旅行时间仅包括在网络上行驶的时间，不包括服务或等待时间。</para>
        ///   <para>此字段可以包含 null 值;空值表示对最大允许行驶时间没有限制。此字段值不能大于 MaxTotalTime 字段值。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>最大总距离：</para>
        ///   <para>路线的最大允许行驶距离。</para>
        ///   <para>此字段值的单位由距离字段单位参数指定（对于 Python，distance_units）。</para>
        ///   <para>此字段可以包含 null 值;空值表示对最大允许行驶距离没有约束。</para>
        ///   <para>专业名称：</para>
        ///   <para>一个以空格分隔的字符串，其中包含路由支持的专业的名称。null 值表示路由不支持任何专业。</para>
        ///   <para>此字段是 Orders 参数中 SpecialtyNames 字段的外键。</para>
        ///   <para>为了说明什么是专业以及它们是如何工作的，假设一家草坪护理和树木修剪公司有一部分订单需要铲斗卡车来修剪高大的树木。公司将在这些订单的 SpecialtyNames 字段中输入 BucketTruck，以表明他们的特殊需求。对于其他订单，SpecialtyNames 将保留为 null。同样，该公司还将在由带有液压臂的卡车驾驶的路线的 SpecialtyNames 字段中输入 BucketTruck。对于其他路由，这将使该字段为 null。在求解时，VRP 求解器将没有特殊需求的订单分配给任何路径，但仅将需要铲斗车的订单分配给具有铲斗车的路径。</para>
        ///   <para>分配规则：</para>
        /// <para>这指定在解决问题时是否可以使用路由。此字段受值域的约束，可能的值如下：
        ///   <bulletList>
        ///     <bullet_item>包括—路径包含在求解操作中。这是默认值。 </bullet_item><para/>
        ///     <bullet_item>排除 - 路径已从求解操作中排除。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Routes")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _routes { get; set; }


        /// <summary>
        /// <para>Breaks</para>
        /// <para><xdoc>
        ///   <para>The rest periods, or breaks, for the routes in a given vehicle routing problem. A break is associated with exactly one route, and it can be taken after completing an order, while en route to an order, or prior to servicing an order. It has a start time and a duration, for which the driver may or may not be paid. There are three options for establishing when a break begins: using a time window, a maximum travel time, or a maximum work time.</para>
        ///   <para>The breaks record set has associated attributes. The fields in the attribute table are listed and described below.</para>
        ///   <para></para>
        ///   <para>ObjectID:</para>
        ///   <para>The system-managed ID field.</para>
        ///   <para>RouteName:</para>
        ///   <para>The name of the route that the break applies to. Although a break is assigned to exactly one route, many breaks can be assigned to the same route.</para>
        ///   <para>This field is a foreign key to the Name field in the Routes class and can't have a null value.</para>
        ///   <para>Precedence:</para>
        ///   <para>Precedence values sequence the breaks of a given route. Breaks with a precedence value of 1 occur before those with a value of 2, and so on.</para>
        ///   <para>All breaks must have a precedence value, regardless of whether they are time-window, maximum-travel-time, or maximum-work-time breaks.</para>
        ///   <para>ServiceTime</para>
        ///   <para>The duration of the break. This field can't contain null values and has a default value of 60.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>TimeWindowStart:</para>
        ///   <para>The starting time of the break's time window. Half-open time windows are invalid for Breaks.</para>
        ///   <para>If this field has a value, MaxTravelTimeBetweenBreaks and MaxCumulWorkTime must be null; moreover, all other breaks in the analysis layer must have null values for MaxTravelTimeBetweenBreaks and MaxCumulWorkTime.</para>
        ///   <para>An error will occur at solve time if a route has multiple breaks with overlapping time windows.</para>
        ///   <para>The time window fields in breaks can contain a time-only value or a date and time value in a date field and cannot be integers representing milliseconds since Epoch. The time zone for time window fields is specified using the time_zone_usage_for_time_fields parameter. If a time field, such as TimeWindowStart, has a time-only value (for example, 12:00 p.m.), the date is assumed to be the date specified by the Default Date parameter (default_date in Python). Using date and time values (for example, 7/11/2012 12:00 p.m.) allows you to specify time windows that span two or more days. This is beneficial when a break should be taken sometime before and after midnight.</para>
        ///   <para>The default date is ignored when any time window field includes a date with the time. To avoid an error in this situation, format all time windows in Depots, Routes, Orders, and Breaks to also include the date with the time.</para>
        ///   <para>TimeWindowEnd:</para>
        ///   <para>The ending time of the break's time window. Half-open time windows are invalid for Breaks.</para>
        ///   <para>If this field has a value, MaxTravelTimeBetweenBreaks and MaxCumulWorkTime must be null; moreover, all other breaks in the analysis layer must have null values for MaxTravelTimeBetweenBreaks and MaxCumulWorkTime.</para>
        ///   <para>MaxViolationTime:</para>
        ///   <para>This field specifies the maximum allowable violation time for a time-window break. A time window is considered violated if the arrival time falls outside the time range.</para>
        ///   <para>A zero value indicates the time window cannot be violated; that is, the time window is hard. A nonzero value specifies the maximum amount of lateness; for example, the break can begin up to 30 minutes beyond the end of its time window, but the lateness is penalized pursuant to the Time Window Violation Importance parameter (time_window_factor in Python).</para>
        ///   <para>This property can be null; a null value with TimeWindowStart and TimeWindowEnd values indicates that there is no limit on the allowable violation time. If MaxTravelTimeBetweenBreaks or MaxCumulWorkTime has a value, MaxViolationTime must be null.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>MaxTravelTimeBetweenBreaks:</para>
        ///   <para>The maximum amount of travel time that can be accumulated before the break is taken. The travel time is accumulated either from the end of the previous break or, if a break has not yet been taken, from the start of the route.</para>
        ///   <para>If this is the route's final break, MaxTravelTimeBetweenBreaks also indicates the maximum travel time that can be accumulated from the final break to the end depot.</para>
        ///   <para>This field is designed to limit how long a person can drive until a break is required. For instance, if the Time Field Units parameter (time_units in Python) of the analysis is set to Minutes, and MaxTravelTimeBetweenBreaks has a value of 120, the driver will get a break after two hours of driving. To assign a second break after two more hours of driving, the second break's MaxTravelTimeBetweenBreaks field value should be 120.</para>
        ///   <para>If this field has a value, TimeWindowStart, TimeWindowEnd, MaxViolationTime, and MaxCumulWorkTime must be null for an analysis to solve successfully.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>MaxCumulWorkTime:</para>
        ///   <para>The maximum amount of work time that can be accumulated before the break is taken. Work time is always accumulated from the beginning of the route.</para>
        ///   <para>Work time is the sum of travel time and service times at orders, depots, and breaks. Note, however, that this excludes wait time, which is the time a route (or driver) spends waiting at an order or depot for a time window to begin.</para>
        ///   <para>This field is designed to limit how long a person can work until a break is required. For instance, if the Time Field Units parameter (time_units in Python) is set to Minutes, MaxCumulWorkTime has a value of 120, and ServiceTime has a value of 15, the driver will get a 15-minute break after two hours of work.</para>
        ///   <para>Continuing with the last example, assume a second break is needed after three more hours of work. To specify this break, you would enter 315 (five hours and 15 minutes) as the second break's MaxCumulWorkTime value. This number includes the MaxCumulWorkTime and ServiceTime values of the preceding break, along with the three additional hours of work time before granting the second break. To avoid taking maximum-work-time breaks prematurely, remember that they accumulate work time from the beginning of the route and that work time includes the service time at previously visited depots, orders, and breaks.</para>
        ///   <para>If this field has a value, TimeWindowStart, TimeWindowEnd, MaxViolationTime, and MaxTravelTimeBetweenBreaks must be null for an analysis to solve successfully.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units parameter (time_units in Python).</para>
        ///   <para>IsPaid:</para>
        ///   <para>A Boolean value indicating whether the break is paid or unpaid. A True value indicates that the time spent at the break is included in the route cost computation and overtime determination. A False value indicates otherwise. The default value is True.</para>
        ///   <para>Sequence:</para>
        ///   <para>As an input field, this indicates the sequence of the break on its route. This field can contain null values. The input sequence values are positive and unique for each route (shared across renewal depot visits, orders, and breaks) but need not start from 1 or be contiguous.</para>
        ///   <para>The solver modifies the sequence field. After solving, this field contains the sequence value of the break on its route. Output sequence values for a route are shared across depot visits, orders, and breaks; start from 1 (at the starting depot); and are consecutive.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>给定车辆路径问题中路径的休息时间或中断时间。中断仅与一条路线相关联，可以在完成订单后、前往订单的途中或为订单提供服务之前进行。它有开始时间和持续时间，司机可能会也可能不会得到报酬。有三个选项可用于确定休息时间的开始时间：使用时间窗口、最长行程时间或最长工作时间。</para>
        ///   <para>中断记录集具有关联的属性。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para></para>
        ///   <para>对象 ID：</para>
        ///   <para>系统管理的 ID 字段。</para>
        ///   <para>路由名称：</para>
        ///   <para>中断应用到的路由的名称。虽然一个中断只分配给一条路径，但可以将多个中断分配给同一路径。</para>
        ///   <para>此字段是 Routes 类中 Name 字段的外键，不能具有 null 值。</para>
        ///   <para>优先：</para>
        ///   <para>优先级值对给定路由的中断进行排序。优先级值为 1 的中断发生在值为 2 的中断之前，依此类推。</para>
        ///   <para>所有休息时间都必须具有优先值，无论它们是时间窗口、最大旅行时间还是最大工作时间休息时间。</para>
        ///   <para>服务时间</para>
        ///   <para>休息的持续时间。此字段不能包含 null 值，默认值为 60。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>时间窗口开始：</para>
        ///   <para>中断时间窗口的开始时间。半开时间窗口对休息时间无效。</para>
        ///   <para>如果此字段具有值，则 MaxTravelTimeBetweenBreaks 和 MaxCumulWorkTime 必须为 null;此外，分析图层中的所有其他中断必须具有 MaxTravelTimeBetweenBreaks 和 MaxCumulWorkTime 的空值。</para>
        ///   <para>如果路径具有多个中断且时间窗口重叠，则在求解时将发生错误。</para>
        ///   <para>休息时间中的时间窗口字段可以包含仅时间值或日期字段中的日期和时间值，并且不能是表示自 Epoch 以来的毫秒的整数。时间窗口字段的时区是使用 time_zone_usage_for_time_fields 参数指定的。如果时间字段（如 TimeWindowStart）具有仅限时间的值（例如，下午 12：00），则假定该日期是由 Default Date 参数（Python 中的 default_date）指定的日期。使用日期和时间值（例如，2012 年 7 月 11 日中午 12：00）可以指定跨越两天或多天的时间窗口。当应该在午夜前后的某个时间休息时，这是有益的。</para>
        ///   <para>当任何时间窗口字段包含带有时间的日期时，将忽略默认日期。为避免在这种情况下出现错误，请设置“仓库”、“路线”、“订单”和“休息时间”中所有时间窗口的格式，以同时包含日期和时间。</para>
        ///   <para>TimeWindowEnd：</para>
        ///   <para>休息时间窗口的结束时间。半开时间窗口对休息时间无效。</para>
        ///   <para>如果此字段具有值，则 MaxTravelTimeBetweenBreaks 和 MaxCumulWorkTime 必须为 null;此外，分析图层中的所有其他中断必须具有 MaxTravelTimeBetweenBreaks 和 MaxCumulWorkTime 的空值。</para>
        ///   <para>MaxViolationTime：</para>
        ///   <para>此字段指定时间窗口中断的最大允许违规时间。如果到达时间超出时间范围，则视为违反时间窗口。</para>
        ///   <para>零值表示不能违反时间窗口;也就是说，时间窗口很难。非零值指定最大延迟量;例如，休息可以在其时间窗口结束后的 30 分钟内开始，但迟到会根据时间窗口违规重要性参数（Python 中的 time_window_factor）进行惩罚。</para>
        ///   <para>此属性可以为 null;具有 TimeWindowStart 和 TimeWindowEnd 值的 null 值表示对允许的违规时间没有限制。如果 MaxTravelTimeBetweenBreaks 或 MaxCumulWorkTime 具有值，则 MaxViolationTime 必须为 null。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>MaxTravelTimeBetweenBreaks：</para>
        ///   <para>休息前可以累积的最大旅行时间。旅行时间从上一次休息结束开始累积，或者，如果尚未休息，则从路线开始累积。</para>
        ///   <para>如果这是路线的最终停靠点，则 MaxTravelTimeBetweenBreaks 还会指示从最终停靠点到终点站可以累积的最大行驶时间。</para>
        ///   <para>此字段旨在限制一个人在需要休息之前可以行驶多长时间。例如，如果分析的时间字段单位参数（Python 中的 time_units）设置为“分钟”，并且 MaxTravelTimeBetweenBreaks 的值为 120，则驾驶员将在驾驶两小时后休息。若要在行驶两个小时后分配第二个休息时间，第二个休息时间的 MaxTravelTimeBetweenBreaks 字段值应为 120。</para>
        ///   <para>如果此字段具有值，则 TimeWindowStart、TimeWindowEnd、MaxViolationTime 和 MaxCumulWorkTime 必须为 null，分析才能成功求解。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>MaxCumulWorkTime：</para>
        ///   <para>休息前可以累积的最大工作时间。工作时间总是从路线的起点开始累积的。</para>
        ///   <para>工作时间是订单、仓库和休息处的旅行时间和服务时间的总和。但请注意，这不包括等待时间，等待时间是路线（或司机）在订单或仓库等待时间窗口开始的时间。</para>
        ///   <para>此字段旨在限制一个人在需要休息之前可以工作多长时间。例如，如果时间字段单位参数（Python 中的time_units）设置为“分钟”，MaxCumulWorkTime 的值为 120，ServiceTime 的值为 15，则驱动程序将在工作两小时后获得 15 分钟的休息时间。</para>
        ///   <para>继续最后一个示例，假设在再工作三个小时后需要第二次休息。若要指定此休息时间，请输入 315（5 小时 15 分钟）作为第二个休息时间的 MaxCumulWorkTime 值。此数字包括前一个中断的 MaxCumulWorkTime 和 ServiceTime 值，以及在授予第二个中断之前的额外三个小时的工作时间。为避免过早地进行最大工作时间休息，请记住，它们从路线开始累积工作时间，并且工作时间包括以前访问过的仓库、订单和休息时间的服务时间。</para>
        ///   <para>如果此字段具有值，则 TimeWindowStart、TimeWindowEnd、MaxViolationTime 和 MaxTravelTimeBetweenBreaks 必须为 null 才能成功求解分析。</para>
        ///   <para>此字段值的单位由时间字段单位参数（在 Python 中为 time_units）指定。</para>
        ///   <para>已付费：</para>
        ///   <para>一个 Boolean 值，该值指示中断是付费还是未付费。True 值指示在停工时花费的时间包含在工艺路线成本计算和加班确定中。False 值表示其他情况。默认值为 True。</para>
        ///   <para>序列：</para>
        ///   <para>作为输入字段，这表示其路线上的中断顺序。此字段可以包含 null 值。每条路由的输入序列值为正且唯一（在续订仓库访问、订单和中断之间共享），但不必从 1 开始或连续。</para>
        ///   <para>求解器修改序列字段。求解后，此字段包含其路径上中断的序列值。工艺路线的输出序列值在仓库访问、订单和中断之间共享;从 1 开始（在起始站）;并且是连续的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Breaks")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _breaks { get; set; } = null;


        /// <summary>
        /// <para>Time Field Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the time units for all time-based field values in the analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>Seconds—Seconds</bullet_item><para/>
        ///     <bullet_item>Minutes—Minutes</bullet_item><para/>
        ///     <bullet_item>Hours—Hours</bullet_item><para/>
        ///     <bullet_item>Days—Days</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Many features and records in a VRP analysis have fields for storing time values, such as ServiceTime for orders and CostPerUnitTime for routes. To minimize data entry requirements, these field values don't include units. Instead, all distance-based field values must be entered in the same units, and this parameter is used to specify the units of those values.</para>
        ///   <para>Note that output time-based fields use the same units specified by this parameter.</para>
        ///   <para>This time unit doesn't need to match the time unit of the network Time Attribute parameter (time_attribute in Python).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定分析中所有基于时间的字段值的时间单位。</para>
        ///   <bulletList>
        ///     <bullet_item>秒 - 秒</bullet_item><para/>
        ///     <bullet_item>分钟 - 分钟</bullet_item><para/>
        ///     <bullet_item>小时 - 小时</bullet_item><para/>
        ///     <bullet_item>天 - 天</bullet_item><para/>
        ///   </bulletList>
        ///   <para>VRP 分析中的许多要素和记录都具有用于存储时间值的字段，例如订单的 ServiceTime 和工艺路线的 CostPerUnitTime。为了最大程度地减少数据输入要求，这些字段值不包括单位。相反，所有基于距离的字段值必须以相同的单位输入，并且此参数用于指定这些值的单位。</para>
        ///   <para>请注意，基于时间的输出字段使用此参数指定的相同单位。</para>
        ///   <para>此时间单位不需要与网络时间属性参数（Python 中的time_attribute）的时间单位匹配。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time Field Units")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _time_units_value _time_units { get; set; }

        public enum _time_units_value
        {
            /// <summary>
            /// <para>Minutes</para>
            /// <para>Minutes—Minutes</para>
            /// <para>分钟 - 分钟</para>
            /// </summary>
            [Description("Minutes")]
            [GPEnumValue("Minutes")]
            _Minutes,

            /// <summary>
            /// <para>Seconds</para>
            /// <para>Seconds—Seconds</para>
            /// <para>秒 - 秒</para>
            /// </summary>
            [Description("Seconds")]
            [GPEnumValue("Seconds")]
            _Seconds,

            /// <summary>
            /// <para>Hours</para>
            /// <para>Hours—Hours</para>
            /// <para>小时 - 小时</para>
            /// </summary>
            [Description("Hours")]
            [GPEnumValue("Hours")]
            _Hours,

            /// <summary>
            /// <para>Days</para>
            /// <para>Days—Days</para>
            /// <para>天 - 天</para>
            /// </summary>
            [Description("Days")]
            [GPEnumValue("Days")]
            _Days,

        }

        /// <summary>
        /// <para>Distance Field Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the distance units for all distance-based field values in the analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>Miles—Miles</bullet_item><para/>
        ///     <bullet_item>Kilometers—Kilometers</bullet_item><para/>
        ///     <bullet_item>Feet—Feet</bullet_item><para/>
        ///     <bullet_item>Yards—Yards</bullet_item><para/>
        ///     <bullet_item>Meters—Meters</bullet_item><para/>
        ///     <bullet_item>Nautical Miles—Nautical miles</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Many features and records in a VRP analysis have fields for storing distance values, such as MaxTotalDistance and CostPerUnitDistance for routes. To minimize data entry requirements, these field values don't include units. Instead, all distance-based field values must be entered in the same units, and this parameter is used to specify the units of those values.</para>
        ///   <para>Note that output distance-based fields use the same units specified by this parameter.</para>
        ///   <para>This distance unit doesn't need to match the distance unit of the network Distance Attribute (distance attribute in Python).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定分析中所有基于距离的字段值的距离单位。</para>
        ///   <bulletList>
        ///     <bullet_item>英里 - 英里</bullet_item><para/>
        ///     <bullet_item>公里 - 公里</bullet_item><para/>
        ///     <bullet_item>英尺 - 英尺</bullet_item><para/>
        ///     <bullet_item>码 - 码</bullet_item><para/>
        ///     <bullet_item>米 - 米</bullet_item><para/>
        ///     <bullet_item>海里—海里</bullet_item><para/>
        ///   </bulletList>
        ///   <para>VRP 分析中的许多要素和记录都具有用于存储距离值的字段，例如路径的 MaxTotalDistance 和 CostPerUnitDistance。为了最大程度地减少数据输入要求，这些字段值不包括单位。相反，所有基于距离的字段值必须以相同的单位输入，并且此参数用于指定这些值的单位。</para>
        ///   <para>请注意，基于距离的输出字段使用此参数指定的相同单位。</para>
        ///   <para>此距离单位不需要与网络距离属性（Python 中的距离属性）的距离单位匹配。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distance Field Units")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _distance_units_value _distance_units { get; set; }

        public enum _distance_units_value
        {
            /// <summary>
            /// <para>Miles</para>
            /// <para>Miles—Miles</para>
            /// <para>英里 - 英里</para>
            /// </summary>
            [Description("Miles")]
            [GPEnumValue("Miles")]
            _Miles,

            /// <summary>
            /// <para>Kilometers</para>
            /// <para>Kilometers—Kilometers</para>
            /// <para>公里 - 公里</para>
            /// </summary>
            [Description("Kilometers")]
            [GPEnumValue("Kilometers")]
            _Kilometers,

            /// <summary>
            /// <para>Feet</para>
            /// <para>Feet—Feet</para>
            /// <para>英尺 - 英尺</para>
            /// </summary>
            [Description("Feet")]
            [GPEnumValue("Feet")]
            _Feet,

            /// <summary>
            /// <para>Yards</para>
            /// <para>Yards—Yards</para>
            /// <para>码 - 码</para>
            /// </summary>
            [Description("Yards")]
            [GPEnumValue("Yards")]
            _Yards,

            /// <summary>
            /// <para>Meters</para>
            /// <para>Meters—Meters</para>
            /// <para>米 - 米</para>
            /// </summary>
            [Description("Meters")]
            [GPEnumValue("Meters")]
            _Meters,

            /// <summary>
            /// <para>Nautical Miles</para>
            /// <para>Nautical Miles—Nautical miles</para>
            /// <para>海里—海里</para>
            /// </summary>
            [Description("Nautical Miles")]
            [GPEnumValue("NauticalMiles")]
            _NauticalMiles,

        }

        /// <summary>
        /// <para>Network Dataset</para>
        /// <para>The network dataset on which the vehicle routing problem analysis will be performed. The network dataset must have a time-based cost attribute, since the VRP solver minimizes time.</para>
        /// <para>将对其执行车辆路径问题分析的网络数据集。网络数据集必须具有基于时间的成本属性，因为 VRP 求解器可最大程度地减少时间。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Network Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _network_dataset { get; set; }


        /// <summary>
        /// <para>Output Geodatabase Workspace</para>
        /// <para>The file geodatabase or in-memory workspace in which the output feature classes will be created. This workspace must already exist. The default output workspace is in memory.</para>
        /// <para>将在其中创建输出要素类的文件地理数据库或内存中工作空间。此工作区必须已存在。默认输出工作区位于内存中。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Geodatabase Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_workspace_location { get; set; }


        /// <summary>
        /// <para>Output Unassigned Stops Name</para>
        /// <para>The name of the output feature class that will contain any unreachable depots or unassigned orders.</para>
        /// <para>将包含任何无法访问的仓库或未分配订单的输出要素类的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Unassigned Stops Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_unassigned_stops_name { get; set; }


        /// <summary>
        /// <para>Output Stops Name</para>
        /// <para>The name of the feature class that will contain the stops visited by routes. This feature class includes stops at depots, orders, and breaks.</para>
        /// <para>将包含路径访问的停靠点的要素类的名称。此要素类包括停靠点、订单和停靠点。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Stops Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_stops_name { get; set; }


        /// <summary>
        /// <para>Output Routes Name</para>
        /// <para>The name of the feature class that will contain the routes of the analysis.</para>
        /// <para>将包含分析路径的要素类的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Routes Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_routes_name { get; set; }


        /// <summary>
        /// <para>Output Directions Name</para>
        /// <para>The name of the feature class that will contain the directions for the routes.</para>
        /// <para>将包含路径方向的要素类的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Directions Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_directions_name { get; set; }


        /// <summary>
        /// <para>Default Date</para>
        /// <para>The default date for time field values that specify a time of day without including a date.</para>
        /// <para>指定一天中的时间而不包含日期的字段值的默认日期。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Default Date")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _default_date { get; set; } = null;


        /// <summary>
        /// <para>U-Turn Policy</para>
        /// <para><xdoc>
        ///   <para>Specifies the U-turn policy that will be used at junctions. Allowing U-turns implies that the solver can turn around at a junction and double back on the same street. Given that junctions represent street intersections and dead ends, different vehicles may be able to turn around at some junctions but not at others—it depends on whether the junction represents an intersection or a dead end. To accommodate this, the U-turn policy parameter is implicitly specified by the number of edges that connect to the junction, which is known as junction valency. The acceptable values for this parameter are listed below; each is followed by a description of its meaning in terms of junction valency.</para>
        ///   <bulletList>
        ///     <bullet_item>Allowed—U-turns are permitted at junctions with any number of connected edges. This is the default value.</bullet_item><para/>
        ///     <bullet_item>Not allowed—U-turns are prohibited at all junctions, regardless of junction valency. However, U-turns are still permitted at network locations even when this setting is chosen, but you can set the individual network location's CurbApproach property to prohibit U-turns there as well.</bullet_item><para/>
        ///     <bullet_item>Allowed at dead ends only—U-turns are prohibited at all junctions, except those that have only one adjacent edge (a dead end).</bullet_item><para/>
        ///     <bullet_item>Allowed at dead ends and intersections only—U-turns are prohibited at junctions where exactly two adjacent edges meet but are permitted at intersections (junctions with three or more adjacent edges) and dead ends (junctions with exactly one adjacent edge). Often, networks have extraneous junctions in the middle of road segments. This option prevents vehicles from making U-turns at these locations.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>If you need a more precisely defined U-turn policy, consider adding a global turn delay evaluator to a network cost attribute or adjusting its settings if one exists, and pay particular attention to the configuration of reverse turns. You can also set the CurbApproach property of your network locations.</para>
        ///   <para>The value of this parameter is overridden when Travel Mode (travel_mode in Python) is set to any value other than custom.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将在交汇点使用的 U 形转弯策略。允许掉头意味着求解器可以在交叉路口掉头，并在同一条街道上折返。鉴于交叉路口代表街道交叉路口和死胡同，不同的车辆可能在某些交叉路口掉头，但在其他交叉路口则不能掉头——这取决于交叉路口是代表交叉路口还是死胡同。为了适应这种情况，U 形转弯策略参数由连接到交汇点的边数隐式指定，这称为交汇点化合价。下面列出了此参数的可接受值;每个之后都描述了其在结化合价方面的含义。</para>
        ///   <bulletList>
        ///     <bullet_item>允许 - 允许在具有任意数量连接边的交汇处进行 U 形转弯。这是默认值。</bullet_item><para/>
        ///     <bullet_item>不允许 - 无论交汇点化合价如何，所有交汇点都禁止掉头。但是，即使选择此设置，仍允许在网络位置掉头，但您可以设置单个网络位置的 CurbApproach 属性以禁止掉头。</bullet_item><para/>
        ///     <bullet_item>仅允许在死胡同处 - 所有交汇点都禁止掉头，但只有一个相邻边（死胡同）的交汇点除外。</bullet_item><para/>
        ///     <bullet_item>仅允许在死角和交叉点处 - 在两条相邻边恰好相交的交汇处禁止掉头，但在交叉点（具有三个或更多相邻边的交汇点）和死端（恰好具有一条相邻边的交汇点）允许掉头。通常，网络在路段中间有无关的交叉路口。此选项可防止车辆在这些位置掉头。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>如果需要更精确地定义掉头策略，请考虑将全局转弯延迟评估器添加到网络成本属性或调整其设置（如果存在），并特别注意倒车转弯的配置。还可以设置网络位置的 CurbApproach 属性。</para>
        ///   <para>当“出行模式”（在 Python 中travel_mode）设置为除自定义以外的任何值时，将覆盖此参数的值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("U-Turn Policy")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _uturn_policy_value _uturn_policy { get; set; } = _uturn_policy_value._ALLOW_UTURNS;

        public enum _uturn_policy_value
        {
            /// <summary>
            /// <para>Allowed</para>
            /// <para>Allowed—U-turns are permitted at junctions with any number of connected edges. This is the default value.</para>
            /// <para>允许 - 允许在具有任意数量连接边的交汇处进行 U 形转弯。这是默认值。</para>
            /// </summary>
            [Description("Allowed")]
            [GPEnumValue("ALLOW_UTURNS")]
            _ALLOW_UTURNS,

            /// <summary>
            /// <para>Not allowed</para>
            /// <para>Not allowed—U-turns are prohibited at all junctions, regardless of junction valency. However, U-turns are still permitted at network locations even when this setting is chosen, but you can set the individual network location's CurbApproach property to prohibit U-turns there as well.</para>
            /// <para>不允许 - 无论交汇点化合价如何，所有交汇点都禁止掉头。但是，即使选择此设置，仍允许在网络位置掉头，但您可以设置单个网络位置的 CurbApproach 属性以禁止掉头。</para>
            /// </summary>
            [Description("Not allowed")]
            [GPEnumValue("NO_UTURNS")]
            _NO_UTURNS,

            /// <summary>
            /// <para>Allowed at dead ends only</para>
            /// <para>Allowed at dead ends only—U-turns are prohibited at all junctions, except those that have only one adjacent edge (a dead end).</para>
            /// <para>仅允许在死胡同处 - 所有交汇点都禁止掉头，但只有一个相邻边（死胡同）的交汇点除外。</para>
            /// </summary>
            [Description("Allowed at dead ends only")]
            [GPEnumValue("ALLOW_DEAD_ENDS_ONLY")]
            _ALLOW_DEAD_ENDS_ONLY,

            /// <summary>
            /// <para>Allowed at dead ends and intersections only</para>
            /// <para>Allowed at dead ends and intersections only—U-turns are prohibited at junctions where exactly two adjacent edges meet but are permitted at intersections (junctions with three or more adjacent edges) and dead ends (junctions with exactly one adjacent edge). Often, networks have extraneous junctions in the middle of road segments. This option prevents vehicles from making U-turns at these locations.</para>
            /// <para>仅允许在死角和交叉点处 - 在两条相邻边恰好相交的交汇处禁止掉头，但在交叉点（具有三个或更多相邻边的交汇点）和死端（恰好具有一条相邻边的交汇点）允许掉头。通常，网络在路段中间有无关的交叉路口。此选项可防止车辆在这些位置掉头。</para>
            /// </summary>
            [Description("Allowed at dead ends and intersections only")]
            [GPEnumValue("ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY")]
            _ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY,

        }

        /// <summary>
        /// <para>Time Window Violation Importance</para>
        /// <para><xdoc>
        ///   <para>Specifies the importance of honoring time windows. There are three options, which are listed and described below.</para>
        ///   <bulletList>
        ///     <bullet_item>Low—Places more importance on minimizing drive times and less on arriving at stops on time. You may want to use this setting if you have a growing backlog of service requests. For the purpose of servicing more orders in a day and reducing the backlog, you can choose this setting even though customers may be inconvenienced with your late arrivals.</bullet_item><para/>
        ///     <bullet_item>Medium—Balances the importance of minimizing drive times and arriving within time windows. This is the default value.</bullet_item><para/>
        ///     <bullet_item>High—Places more importance on arriving at stops on time and less on minimizing drive times. Organizations that make time-critical deliveries or that are concerned with customer service would choose this setting.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定遵守时间窗口的重要性。有三个选项，下面列出并描述它们。</para>
        ///   <bulletList>
        ///     <bullet_item>低 - 更重视最小化行驶时间，而不是准时到达停靠点。如果积压的服务请求不断增加，则可能需要使用此设置。为了在一天内处理更多订单并减少积压，即使客户可能会因您的迟到而感到不便，您也可以选择此设置。</bullet_item><para/>
        ///     <bullet_item>中 - 平衡最小化行驶时间和在时间窗口内到达的重要性。这是默认值。</bullet_item><para/>
        ///     <bullet_item>高 - 更重视准时到达停靠点，而不是最小化行驶时间。进行时间关键型交付或关注客户服务的组织将选择此设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time Window Violation Importance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _time_window_factor_value _time_window_factor { get; set; } = _time_window_factor_value._Medium;

        public enum _time_window_factor_value
        {
            /// <summary>
            /// <para>High</para>
            /// <para>High—Places more importance on arriving at stops on time and less on minimizing drive times. Organizations that make time-critical deliveries or that are concerned with customer service would choose this setting.</para>
            /// <para>高 - 更重视准时到达停靠点，而不是最小化行驶时间。进行时间关键型交付或关注客户服务的组织将选择此设置。</para>
            /// </summary>
            [Description("High")]
            [GPEnumValue("High")]
            _High,

            /// <summary>
            /// <para>Medium</para>
            /// <para>Medium—Balances the importance of minimizing drive times and arriving within time windows. This is the default value.</para>
            /// <para>中 - 平衡最小化行驶时间和在时间窗口内到达的重要性。这是默认值。</para>
            /// </summary>
            [Description("Medium")]
            [GPEnumValue("Medium")]
            _Medium,

            /// <summary>
            /// <para>Low</para>
            /// <para>Low—Places more importance on minimizing drive times and less on arriving at stops on time. You may want to use this setting if you have a growing backlog of service requests. For the purpose of servicing more orders in a day and reducing the backlog, you can choose this setting even though customers may be inconvenienced with your late arrivals.</para>
            /// <para>低 - 更重视最小化行驶时间，而不是准时到达停靠点。如果积压的服务请求不断增加，则可能需要使用此设置。为了在一天内处理更多订单并减少积压，即使客户可能会因您的迟到而感到不便，您也可以选择此设置。</para>
            /// </summary>
            [Description("Low")]
            [GPEnumValue("Low")]
            _Low,

        }

        /// <summary>
        /// <para>Spatially Cluster Routes</para>
        /// <para><xdoc>
        ///   <para>Specifies whether to use spatial clustering.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The orders assigned to an individual route will be spatially clustered. Clustering orders tends to keep routes in smaller areas and reduce how often route lines intersect one another; yet, clustering can increase overall travel times. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The solver will not prioritize spatially clustering orders and the route lines may intersect. Use this option if route zones are specified.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否使用空间聚类分析。</para>
        ///   <bulletList>
        ///     <bullet_item>选中—分配给单个路径的订单将在空间上聚类。聚类顺序倾向于将路径保持在较小的区域中，并减少路径线相互相交的频率;然而，聚类会增加整体旅行时间。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 求解器不会对空间聚类顺序进行优先级排序，并且路径线可能会相交。如果指定了路由区域，请使用此选项。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatially Cluster Routes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _spatially_cluster_routes_value _spatially_cluster_routes { get; set; } = _spatially_cluster_routes_value._true;

        public enum _spatially_cluster_routes_value
        {
            /// <summary>
            /// <para>CLUSTER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CLUSTER")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_CLUSTER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_CLUSTER")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Route Zones</para>
        /// <para><xdoc>
        ///   <para>Delineates work territories for given routes. A route zone is a polygon feature and is used to constrain routes to servicing only those orders that fall within or near the specified area. The following are examples of when route zones may be useful:
        ///   <bulletList>
        ///     <bullet_item>Some of your employees don't have the required permits to perform work in certain states or communities. You can create a hard route zone so they only visit orders in areas where they meet the requirements.  </bullet_item><para/>
        ///     <bullet_item>One of your vehicles breaks down frequently, so you want to minimize response time by having it only visit orders that are close to your maintenance garage. You can create a soft or hard route zone to keep the vehicle nearby.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>The route zones feature set has an associated attribute table. The fields in the attribute table are listed and described below.</para>
        ///   <para>ObjectID:</para>
        ///   <para>The system-managed ID field.</para>
        ///   <para>Shape:</para>
        ///   <para>The geometry field indicating the geographic location of the network analysis object.</para>
        ///   <para>RouteName:</para>
        ///   <para>The name of the route to which this zone applies. A route zone can have a maximum of one associated route. This field can't contain null values, and it is a foreign key to the Name field in the Routes feature layer.</para>
        ///   <para>IsHardZone:</para>
        ///   <para>A Boolean value indicating a hard or soft route zone. A True value indicates that the route zone is hard; that is, an order that falls outside the route zone polygon can't be assigned to the route. The default value is True (1). A False value (0) indicates that such orders can still be assigned, but the cost of servicing the order is weighted by a function that is based on the Euclidean distance from the route zone. Basically, this means that as the straight-line distance from the soft zone to the order increases, the likelihood of the order being assigned to the route decreases.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>为给定路径划定工作区域。路径区域是一个面要素，用于将路径约束为仅为位于指定区域内或附近的订单提供服务。以下是路由区域可能有用的示例：
        ///   <bulletList>
        ///     <bullet_item>您的一些员工没有在某些州或社区从事工作所需的许可证。您可以创建硬路由区域，以便他们仅访问符合要求的区域的订单。 </bullet_item><para/>
        ///     <bullet_item>您的一辆车经常发生故障，因此您希望通过让它只访问靠近您的维修车库的订单来最大限度地缩短响应时间。您可以创建软路线或硬路线区域以将车辆保持在附近。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>路径区域要素集具有关联的属性表。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para>对象 ID：</para>
        ///   <para>系统管理的 ID 字段。</para>
        ///   <para>形状：</para>
        ///   <para>指示网络分析对象的地理位置的几何字段。</para>
        ///   <para>路由名称：</para>
        ///   <para>此区域应用到的路由的名称。一个路由区域最多可以有一个关联的路由。此字段不能包含空值，并且是 Routes 要素图层中 Name 字段的外键。</para>
        ///   <para>IsHardZone：</para>
        ///   <para>一个 Boolean 值，该值指示硬路由或软路由区域。True 值表示路由区域为硬;也就是说，无法将位于路径区域面之外的订单分配给路径。默认值为 True （1）。False 值 （0） 表示仍可分配此类订单，但服务订单的成本由基于与工艺路线区域的欧几里得距离的函数加权。基本上，这意味着随着从软区到订单的直线距离增加，订单分配给路径的可能性会降低。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Route Zones")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _route_zones { get; set; } = null;


        /// <summary>
        /// <para>Route Renewals</para>
        /// <para><xdoc>
        ///   <para>Specifies the intermediate depots that routes can visit to reload or unload the cargo they are delivering or picking up. Specifically, a route renewal links a route to a depot. The relationship indicates that the route can renew (reload or unload while en route) at the associated depot.</para>
        ///   <para>Route renewals can be used to model scenarios in which a vehicle picks up a full load of deliveries at the starting depot, services the orders, returns to the depot to renew its load of deliveries, and continues servicing more orders. For example, in propane gas delivery, the vehicle may make several deliveries until its tank is nearly or completely depleted, visit a refueling point, and make more deliveries.</para>
        ///   <para>The following are rules and options to consider when also working with route seed points:</para>
        ///   <para>
        ///     <bulletList>
        ///       <bullet_item>The reload/unload point, or renewal location, can be different from the start or end depot.</bullet_item><para/>
        ///       <bullet_item>Each route can have one or many predetermined renewal locations.</bullet_item><para/>
        ///       <bullet_item>A renewal location may be used more than once by a single route.</bullet_item><para/>
        ///       <bullet_item>In some cases where there may be several potential renewal locations for a route, the closest available renewal location is chosen by the solver.</bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        ///   <para>The route renewals record set has associated attributes. The fields in the attribute table are listed and described below.</para>
        ///   <para>ObjectID:</para>
        ///   <para>The system-managed ID field.</para>
        ///   <para>DepotName:</para>
        ///   <para>The name of the depot where this renewal takes place. This field can't contain a null value and is a foreign key to the Name field in the Depots feature layer.</para>
        ///   <para>RouteName:</para>
        ///   <para>The name of the route that this renewal applies to. This field can't contain a null value and is a foreign key to the Name field in the Routes feature layer.</para>
        ///   <para>ServiceTime:</para>
        ///   <para>The service time for the renewal. This field can contain a null value; a null value indicates zero service time.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units property of the analysis layer.</para>
        ///   <para>The time taken to load a vehicle at a renewal depot may depend on the size of the vehicle and how full or empty the vehicle is. However, the service time for a route renewal is a fixed value and does not take into account the actual load. As such, the renewal service time should be given a value corresponding to a full truckload, an average truckload, or another time estimate of your choice.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定路线可以访问的中间仓库，以重新装载或卸载它们正在交付或提取的货物。具体而言，路径更新将路径链接到车辆段。该关系指示工艺路线可以在关联的仓库续订（在途中重新加载或卸载）。</para>
        ///   <para>路径续订可用于对以下场景进行建模：车辆在起始仓库提取满载的交货，为订单提供服务，返回仓库以续订其交货负载，并继续为更多订单提供服务。例如，在丙烷气输送中，车辆可能会进行多次输送，直到其油箱几乎或完全耗尽，访问加油点，并进行更多输送。</para>
        ///   <para>以下是使用路径种子点时要考虑的规则和选项：</para>
        ///   <para>
        ///     <bulletList>
        ///       <bullet_item>重新装卸点或更新位置可能与起点或终点站不同。</bullet_item><para/>
        ///       <bullet_item>每条路由可以有一个或多个预先确定的续订位置。</bullet_item><para/>
        ///       <bullet_item>一个续订位置可以由单个路由使用多个次。</bullet_item><para/>
        ///       <bullet_item>在某些情况下，如果路径可能有多个潜在的续订位置，则求解器会选择最近的可用续订位置。</bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        ///   <para>路由续订记录集具有关联的属性。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para>对象 ID：</para>
        ///   <para>系统管理的 ID 字段。</para>
        ///   <para>仓库名称：</para>
        ///   <para>进行此续订的仓库的名称。此字段不能包含空值，并且是 Depots 要素图层中 Name 字段的外键。</para>
        ///   <para>路由名称：</para>
        ///   <para>此续订应用到的路由的名称。此字段不能包含空值，并且是 Routes 要素图层中 Name 字段的外键。</para>
        ///   <para>服务时间：</para>
        ///   <para>续订的服务时间。此字段可以包含 null 值;空值表示零服务时间。</para>
        ///   <para>此字段值的单位由分析图层的时间字段单位属性指定。</para>
        ///   <para>在更新站装载车辆所需的时间可能取决于车辆的大小以及车辆的满载或空载程度。但是，路线更新的服务时间是固定值，不考虑实际负载。因此，续保服务时间应指定一个与整车装载量、平均卡车装载量或您选择的其他时间估计值相对应的值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Route Renewals")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _route_renewals { get; set; } = null;


        /// <summary>
        /// <para>Order Pairs</para>
        /// <para><xdoc>
        ///   <para>Pairs pick up and deliver orders so they are serviced by the same route.</para>
        ///   <para>Sometimes it is required that the pick up and delivery of orders be paired. For example, a courier company may need to have a route pick up a high-priority package from one order and deliver it to another without returning to a depot, or sorting station, to minimize delivery time. These related orders can be assigned to the same route with the appropriate sequence using order pairs. Moreover, restrictions on how long the package can stay in the vehicle can also be assigned; for example, the package might be a blood sample that has to be transported from the doctor's office to the lab within two hours.</para>
        ///   <para>The order pairs record set has associated attributes. The fields in the attribute table are listed and described below.</para>
        ///   <para>ObjectID:</para>
        ///   <para>The system-managed ID field.</para>
        ///   <para>FirstOrderName:</para>
        ///   <para>The name of the first order of the pair. This field is a foreign key to the Name field in the Orders feature layer.</para>
        ///   <para>SecondOrderName:</para>
        ///   <para>The name of the second order of the pair. This field is a foreign key to the Name field in the Orders feature layer.</para>
        ///   <para>The first order in the pair must be a pickup order; that is, the value for its DeliveryQuantities field is null. The second order in the pair must be a delivery order; that is, the value for its PickupQuantities field is null. The quantity that is picked up at the first order must agree with the quantity that is delivered at the second order. As a special case, both orders may have zero quantities for scenarios where capacities are not used.</para>
        ///   <para>The order quantities are not loaded or unloaded at depots.</para>
        ///   <para>MaxTransitTime:</para>
        ///   <para>The maximum transit time for the pair. The transit time is the duration from the departure time of the first order to the arrival time at the second order. This constraint limits the time-on-vehicle, or ride time, between the two orders. When a vehicle is carrying people or perishable goods, the ride time is typically shorter than that of a vehicle carrying packages or nonperishable goods. This field can contain null values; a null value indicates that there is no constraint on the ride time.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units property of the analysis layer.</para>
        ///   <para>Excess transit time (measured with respect to the direct travel time between order pairs) can be tracked and weighted by the solver. Because of this, you can direct the VRP solver to take one of three approaches: minimize the overall excess transit time, regardless of the increase in travel cost for the fleet; find a solution that balances overall violation time and travel cost; or ignore the overall excess transit time and, instead, minimize the travel cost for the fleet. By assigning an importance level for the Excess Transit Time Importance parameter (excess_transit_factor in Python), you are in effect choosing one of these three approaches. Regardless of the importance level, the solver will always return an error if the MaxTransitTime value is surpassed.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>成对取货和交付订单，以便他们通过相同的路线提供服务。</para>
        ///   <para>有时需要将订单的取货和送货配对。例如，快递公司可能需要让路线从一个订单中提取高优先级包裹并将其交付给另一个订单，而无需返回仓库或分拣站，以最大限度地缩短交货时间。可以使用订单对将这些相关订单分配给具有适当顺序的同一路线。此外，还可以分配对包裹可以在车内停留多长时间的限制;例如，包裹可能是必须在两小时内从医生办公室运送到实验室的血液样本。</para>
        ///   <para>订单对记录集具有关联的属性。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para>对象 ID：</para>
        ///   <para>系统管理的 ID 字段。</para>
        ///   <para>FirstOrderName：</para>
        ///   <para>对中第一个订单的名称。此字段是 Orders 要素图层中 Name 字段的外键。</para>
        ///   <para>SecondOrder名称：</para>
        ///   <para>对的第二个订单的名称。此字段是 Orders 要素图层中 Name 字段的外键。</para>
        ///   <para>对中的第一个订单必须是取货订单;也就是说，其 DeliveryQuantity 字段的值为 null。对中的第二个订单必须是交货订单;也就是说，其 PickupQuantities 字段的值为 null。在第一个订单中提货的数量必须与在第二个订单中交付的数量一致。作为特殊情况，在不使用容量的情况下，两个订单的数量可能为零。</para>
        ///   <para>订单数量不在仓库装卸。</para>
        ///   <para>最大TransitTime：</para>
        ///   <para>货币对的最长传输时间。运输时间是从第一个订单的出发时间到第二个订单的到达时间的持续时间。此约束限制了两个订单之间的车辆上车时间或乘车时间。当车辆运载人员或易腐货物时，行驶时间通常短于运载包裹或不易腐烂货物的车辆。此字段可以包含 null 值;空值表示对乘车时间没有限制。</para>
        ///   <para>此字段值的单位由分析图层的时间字段单位属性指定。</para>
        ///   <para>超额运输时间（相对于订单对之间的直接传输时间进行测量）可以由求解器进行跟踪和加权。因此，您可以指示 VRP 求解器采用以下三种方法之一：无论车队的旅行成本如何增加，都可最大程度地减少总体超额运输时间;找到一个平衡整体违规时间和差旅成本的解决方案;或者忽略整体超额运输时间，而是将车队的旅行成本降至最低。通过为 Excess Transit Time Importance 参数（Python 中的 excess_transit_factor）分配重要性级别，您实际上是在选择这三种方法之一。无论重要性级别如何，如果超过 MaxTransitTime 值，求解器将始终返回错误。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Order Pairs")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _order_pairs { get; set; } = null;


        /// <summary>
        /// <para>Excess Transit Time Importance</para>
        /// <para><xdoc>
        ///   <para>Specifies the importance of reducing excess transit time of order pairs. Excess transit time is the amount of time exceeding the time required to travel directly between the paired orders. Excess time can be caused by driver breaks or travel to intermediate orders and depots.</para>
        ///   <bulletList>
        ///     <bullet_item>Low—Places more importance on minimizing overall solution cost and less on excess transit time. This setting is commonly used by courier services. Since couriers transport packages as opposed to people, they don't need to worry about ride time. Using this setting allows the couriers to service paired orders in the proper sequence and minimize the overall solution cost.</bullet_item><para/>
        ///     <bullet_item>Medium—Balances the importance of reducing excess transit time and reducing the overall solution cost. This is the default value.</bullet_item><para/>
        ///     <bullet_item>High—Places more importance on the shortest transit time between paired orders and less on the overall travel costs. It makes sense to use this setting if you are transporting people between paired orders and you want to shorten their ride time. This is characteristic of taxi services.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定减少订单对的超额运输时间的重要性。超额运输时间是指超过直接在配对订单之间运输所需时间的时间。多余的时间可能是由于司机休息或前往中间订单和仓库造成的。</para>
        ///   <bulletList>
        ///     <bullet_item>低 - 更重视最小化总体解决方案成本，减少多余的运输时间。快递服务通常使用此设置。由于快递员运输包裹而不是人，因此他们无需担心乘车时间。使用此设置，快递员可以按正确的顺序为配对的订单提供服务，并将整体解决方案成本降至最低。</bullet_item><para/>
        ///     <bullet_item>中 - 平衡减少多余运输时间和降低总体解决方案成本的重要性。这是默认值。</bullet_item><para/>
        ///     <bullet_item>高 - 更重视配对订单之间的最短运输时间，而较少关注整体差旅成本。如果您要在配对订单之间运送人员并希望缩短他们的乘车时间，则使用此设置是有意义的。这是出租车服务的特征。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Excess Transit Time Importance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _excess_transit_factor_value _excess_transit_factor { get; set; } = _excess_transit_factor_value._Medium;

        public enum _excess_transit_factor_value
        {
            /// <summary>
            /// <para>High</para>
            /// <para>High—Places more importance on the shortest transit time between paired orders and less on the overall travel costs. It makes sense to use this setting if you are transporting people between paired orders and you want to shorten their ride time. This is characteristic of taxi services.</para>
            /// <para>高 - 更重视配对订单之间的最短运输时间，而较少关注整体差旅成本。如果您要在配对订单之间运送人员并希望缩短他们的乘车时间，则使用此设置是有意义的。这是出租车服务的特征。</para>
            /// </summary>
            [Description("High")]
            [GPEnumValue("High")]
            _High,

            /// <summary>
            /// <para>Medium</para>
            /// <para>Medium—Balances the importance of reducing excess transit time and reducing the overall solution cost. This is the default value.</para>
            /// <para>中 - 平衡减少多余运输时间和降低总体解决方案成本的重要性。这是默认值。</para>
            /// </summary>
            [Description("Medium")]
            [GPEnumValue("Medium")]
            _Medium,

            /// <summary>
            /// <para>Low</para>
            /// <para>Low—Places more importance on minimizing overall solution cost and less on excess transit time. This setting is commonly used by courier services. Since couriers transport packages as opposed to people, they don't need to worry about ride time. Using this setting allows the couriers to service paired orders in the proper sequence and minimize the overall solution cost.</para>
            /// <para>低 - 更重视最小化总体解决方案成本，减少多余的运输时间。快递服务通常使用此设置。由于快递员运输包裹而不是人，因此他们无需担心乘车时间。使用此设置，快递员可以按正确的顺序为配对的订单提供服务，并将整体解决方案成本降至最低。</para>
            /// </summary>
            [Description("Low")]
            [GPEnumValue("Low")]
            _Low,

        }

        /// <summary>
        /// <para>Point Barriers</para>
        /// <para><xdoc>
        ///   <para>Specifies point barriers, which are split into two types: restriction and added cost point barriers. They temporarily restrict traversal across or add impedance to points on the network. The point barriers are defined by a feature set, and the attribute values you specify for the point features determine whether they are restriction or added cost barriers. The fields in the attribute table are listed and described below.</para>
        ///   <para>ObjectID:</para>
        ///   <para>The system-managed ID field.</para>
        ///   <para>Shape:</para>
        ///   <para>The geometry field indicating the geographic location of the network analysis object.</para>
        ///   <para>Name:</para>
        ///   <para>The name of the barrier.</para>
        ///   <para>BarrierType:</para>
        ///   <para>Specifies whether the barrier restricts travel completely or adds cost when traveling through it. There are two options:
        ///   <bulletList>
        ///     <bullet_item>(0)—Prohibits traversing through the barrier. This is the default value.
        ///       <bold>Restriction    </bold>
        ///     </bullet_item><para/>
        ///     <bullet_item>(2)—Traversing through the barrier increases the network cost by the amount specified in the Additional_Time and Additional_Distance fields.
        ///       <bold>Added Cost    </bold>
        ///     </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Additional_Time:</para>
        ///   <para>If BarrierType is set to added cost, the value of the Additional_Time field indicates how much time is added to a route when the route passes through the barrier.</para>
        ///   <para>The unit for this field value is specified by the Time Field Units property of the analysis layer.</para>
        ///   <para>Additional_Distance:</para>
        ///   <para>If BarrierType is set to added cost, the value of the Additional_Distance field indicates how much impedance is added to a route when the route passes through the barrier.</para>
        ///   <para>The unit for this field value is specified by the Distance Field Units parameter.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定点屏障，该屏障分为两种类型：限制和添加的成本点屏障。它们会暂时限制跨网络点的遍历或增加网络上的点的阻抗。点障碍由要素集定义，为点要素指定的属性值决定了它们是限制还是附加成本障碍。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para>对象 ID：</para>
        ///   <para>系统管理的 ID 字段。</para>
        ///   <para>形状：</para>
        ///   <para>指示网络分析对象的地理位置的几何字段。</para>
        ///   <para>名字：</para>
        ///   <para>屏障的名称。</para>
        ///   <para>屏障类型：</para>
        /// <para>指定障碍物是完全限制旅行还是在通过障碍物时增加成本。有两种选择：
        ///   <bulletList>
        /// <bullet_item>（0） - 禁止穿越屏障。这是默认值。
        ///       <bold>限制</bold>
        ///     </bullet_item><para/>
        /// <bullet_item>（2） - 穿越障碍物会增加网络成本，增加 Additional_Time 和 Additional_Distance 字段中指定的金额。
        ///       <bold>附加成本</bold>
        ///     </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Additional_Time：</para>
        ///   <para>如果 BarrierType 设置为增加成本，则 Additional_Time 字段的值指示当路径通过障碍时向路径添加的时间。</para>
        ///   <para>此字段值的单位由分析图层的时间字段单位属性指定。</para>
        ///   <para>Additional_Distance：</para>
        ///   <para>如果 BarrierType 设置为 added cost，则 Additional_Distance 字段的值指示当路由通过屏障时向路由添加的阻抗量。</para>
        ///   <para>此字段值的单位由距离字段单位参数指定。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Point Barriers")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _point_barriers { get; set; } = null;


        /// <summary>
        /// <para>Line Barriers</para>
        /// <para><xdoc>
        ///   <para>Specifies line barriers, which temporarily restrict traversal across them. The line barriers are defined by a feature set. The fields in the attribute table are listed and described below.</para>
        ///   <para>ObjectID:</para>
        ///   <para>The system-managed ID field.</para>
        ///   <para>Shape:</para>
        ///   <para>The geometry field indicating the geographic location of the network analysis object.</para>
        ///   <para>Name:</para>
        ///   <para>The name of the barrier.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定线屏障，以暂时限制跨线栏的遍历。线屏障由要素集定义。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para>对象 ID：</para>
        ///   <para>系统管理的 ID 字段。</para>
        ///   <para>形状：</para>
        ///   <para>指示网络分析对象的地理位置的几何字段。</para>
        ///   <para>名字：</para>
        ///   <para>屏障的名称。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Line Barriers")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _line_barriers { get; set; } = null;


        /// <summary>
        /// <para>Polygon Barriers</para>
        /// <para><xdoc>
        ///   <para>Specifies polygon barriers, which are split into two types: restriction and scaled cost polygon barriers. They temporarily restrict traversal or scale impedance on the parts of the network they cover. The polygon barriers are defined by a feature set, and the attribute values you specify for the polygon features determine whether they are restriction or scaled cost barriers. The fields in the attribute table are listed and described below.</para>
        ///   <para>ObjectID:</para>
        ///   <para>The system-managed ID field.</para>
        ///   <para>Shape:</para>
        ///   <para>The geometry field indicating the geographic location of the network analysis object.</para>
        ///   <para>Name:</para>
        ///   <para>The name of the barrier.</para>
        ///   <para>BarrierType:</para>
        ///   <para>Specifies whether the barrier restricts travel completely or scales the cost of traveling through it. There are two options:</para>
        ///   <bulletList>
        ///     <bullet_item>(0)—Prohibits traversing through any part of the barrier. This is the default value.
        ///     <bold>Restriction</bold>
        ///     </bullet_item><para/>
        ///     <bullet_item>(1)—Scales the impedance of underlying edges by multiplying them by the value of the Attr_[Impedance] property. If edges are partially covered by the barrier, the impedance is apportioned and multiplied.
        ///     <bold>Scaled Cost</bold>
        ///     </bullet_item><para/>
        ///   </bulletList>
        ///   <para>Scaled_Time:</para>
        ///   <para>The time-based impedance values of the edges underlying the barrier are multiplied by the value set in this field. This field is only relevant when the barrier is a scaled cost barrier.</para>
        ///   <para>Scaled_Distance:</para>
        ///   <para>The distance-based impedance values of the edges underlying the barrier are multiplied by the value set in this field. This field is only relevant when the barrier is a scaled cost barrier.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定多边形障碍，这些障碍分为两种类型：限制和缩放成本多边形障碍。它们会暂时限制它们所覆盖的网络部分的遍历或缩放阻抗。面障碍由要素集定义，为面要素指定的属性值决定了它们是限制性障碍还是缩放成本障碍。下面列出了属性表中的字段并对其进行了说明。</para>
        ///   <para>对象 ID：</para>
        ///   <para>系统管理的 ID 字段。</para>
        ///   <para>形状：</para>
        ///   <para>指示网络分析对象的地理位置的几何字段。</para>
        ///   <para>名字：</para>
        ///   <para>屏障的名称。</para>
        ///   <para>屏障类型：</para>
        ///   <para>指定屏障是完全限制旅行还是按比例调整通过障碍物的成本。有两种选择：</para>
        ///   <bulletList>
        /// <bullet_item>（0） - 禁止穿越屏障的任何部分。这是默认值。
        ///     <bold>限制</bold>
        ///     </bullet_item><para/>
        /// <bullet_item>（1） - 通过将基础边乘以 Attr_[Impedance] 属性的值来缩放基础边的阻抗。如果边缘部分被势垒覆盖，则阻抗将分配并相乘。
        ///     <bold>按比例计算的成本</bold>
        ///     </bullet_item><para/>
        ///   </bulletList>
        ///   <para>Scaled_Time：</para>
        ///   <para>势垒下方边的基于时间的阻抗值乘以此字段中设置的值。仅当障碍是缩放成本障碍时，此字段才相关。</para>
        ///   <para>Scaled_Distance：</para>
        ///   <para>势垒下方边缘的基于距离的阻抗值乘以此字段中设置的值。仅当障碍是缩放成本障碍时，此字段才相关。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Polygon Barriers")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _polygon_barriers { get; set; } = null;


        /// <summary>
        /// <para>Time Attribute</para>
        /// <para><xdoc>
        ///   <para>The network cost attribute to use when determining the travel time of network elements.</para>
        ///   <para>The value of this parameter is overridden when Travel Mode (travel_mode in Python) is set to any value other than custom.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定网络元素的行驶时间时要使用的网络成本属性。</para>
        ///   <para>当“出行模式”（在 Python 中travel_mode）设置为除自定义以外的任何值时，将覆盖此参数的值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time Attribute")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _time_attribute { get; set; } = null;


        /// <summary>
        /// <para>Distance Attribute</para>
        /// <para><xdoc>
        ///   <para>The network cost attribute to use when determining the distance of network elements.</para>
        ///   <para>The value of this parameter is overridden when Travel Mode (travel_mode in Python) is set to any value other than custom.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定网络元素距离时要使用的网络成本属性。</para>
        ///   <para>当“出行模式”（在 Python 中travel_mode）设置为除自定义以外的任何值时，将覆盖此参数的值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distance Attribute")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _distance_attribute { get; set; } = null;


        /// <summary>
        /// <para>Use Hierarchy in Analysis</para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>Checked—The hierarchy attribute will be used for the analysis. Using a hierarchy results in the solver preferring higher-order edges to lower-order edges. Hierarchical solves are faster, and they can be used to simulate the preference of a driver who chooses to travel on freeways rather than local roads when possible—even if that means a longer trip. This option is active only if the input network dataset has a hierarchy attribute.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The hierarchy attribute will not be used for the analysis. If hierarchy is not used, the result is an exact route for the network dataset.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>The parameter is inactive if a hierarchy attribute is not defined on the network dataset used to perform the analysis.</para>
        ///   <para>The value of this parameter is overridden when Travel Mode (travel_mode in Python) is set to any value other than custom.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>选中 - 层次结构属性将用于分析。使用层次结构会导致求解器优先选择高阶边而不是低阶边。分层求解速度更快，并且可用于模拟驾驶员的偏好，如果可能的话，他们选择在高速公路上行驶而不是在本地道路上行驶，即使这意味着更长的行程。仅当输入网络数据集具有层次结构属性时，此选项才处于活动状态。</bullet_item><para/>
        ///     <bullet_item>未选中 - 等级属性将不用于分析。如果未使用层次结构，则结果是网络数据集的精确路径。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>如果未在用于执行分析的网络数据集上定义层次结构属性，则该参数处于非活动状态。</para>
        ///   <para>当“出行模式”（在 Python 中travel_mode）设置为除自定义以外的任何值时，将覆盖此参数的值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use Hierarchy in Analysis")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _use_hierarchy_in_analysis_value? _use_hierarchy_in_analysis { get; set; } = null;

        public enum _use_hierarchy_in_analysis_value
        {
            /// <summary>
            /// <para>USE_HIERARCHY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("USE_HIERARCHY")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_HIERARCHY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_HIERARCHY")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Restrictions</para>
        /// <para><xdoc>
        ///   <para>Indicates which network restriction attributes are respected during solve time.</para>
        ///   <para>The value of this parameter is overridden when Travel Mode (travel_mode in Python) is set to any value other than custom.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指示在求解期间遵循哪些网络限制属性。</para>
        ///   <para>当“出行模式”（在 Python 中travel_mode）设置为除自定义以外的任何值时，将覆盖此参数的值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Restrictions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _restrictions { get; set; } = null;


        /// <summary>
        /// <para>Attribute Parameter Values</para>
        /// <para><xdoc>
        ///   <para>Specifies the parameter values for network attributes that have parameters. The record set has two columns that work together to uniquely identify parameters and another column that specifies the parameter value.</para>
        ///   <para>The value of this parameter is overridden when Travel Mode (travel_mode in Python) is set to any value other than custom.</para>
        ///   <para>The attribute parameter values record set has associated attributes. The fields in the attribute table are listed below and described.</para>
        ///   <para>ObjectID:</para>
        ///   <para>The system-managed ID field.</para>
        ///   <para>AttributeName:</para>
        ///   <para>The name of the network attribute whose attribute parameter is set by the table row.</para>
        ///   <para>ParameterName:</para>
        ///   <para>The name of the attribute parameter whose value is set by the table row. (Object type parameters cannot be updated using this tool.)</para>
        ///   <para>ParameterValue:</para>
        ///   <para>The value you want for the attribute parameter. If a value is not specified, the attribute parameter is set to null.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定具有参数的网络属性的参数值。记录集有两列，它们协同工作以唯一标识参数，另一列指定参数值。</para>
        ///   <para>当“出行模式”（在 Python 中travel_mode）设置为除自定义以外的任何值时，将覆盖此参数的值。</para>
        ///   <para>属性参数值记录集具有关联的属性。下面列出了属性表中的字段并进行了描述。</para>
        ///   <para>对象 ID：</para>
        ///   <para>系统管理的 ID 字段。</para>
        ///   <para>属性名称：</para>
        ///   <para>其属性参数由表行设置的网络属性的名称。</para>
        ///   <para>参数名称：</para>
        ///   <para>属性参数的名称，其值由表行设置。（无法使用此工具更新对象类型参数。</para>
        ///   <para>参数值：</para>
        ///   <para>属性参数所需的值。如果未指定值，则属性参数设置为 null。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Attribute Parameter Values")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _attribute_parameter_values { get; set; } = null;


        /// <summary>
        /// <para>Maximum Snap Tolerance</para>
        /// <para>The maximum snap tolerance is the furthest distance that Network Analyst searches when locating or relocating a point onto the network. The search looks for suitable edges or junctions and snaps the point to the nearest one. If a suitable location isn't found within the maximum snap tolerance, the object is marked as unlocated.</para>
        /// <para>最大捕捉容差是 Network Analyst 在网络上定位或重新定位点时搜索的最远距离。搜索将查找合适的边或交汇点，并将点捕捉到最近的点。如果在最大捕捉容差范围内未找到合适的位置，则对象将被标记为未定位。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum Snap Tolerance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _maximum_snap_tolerance { get; set; } = "20 Kilometers";


        /// <summary>
        /// <para>Exclude Restricted Portions of the Network</para>
        /// <para><xdoc>
        ///   <para>Specifies where network locations are placed.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The network locations are only placed on traversable portions of the network. This prevents placing network locations on elements that you can't reach due to restrictions or barriers. Before adding your network locations using this option, make sure that you have already added all the restriction barriers to the input network analysis layer to get expected results. This option is not applicable when adding barrier objects.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The network locations are placed on all the elements of the network. The network locations that are added with this option may be unreachable during the solve process if they are placed on restricted elements.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定网络位置的放置位置。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 网络位置仅放置在网络的可遍历部分。这样可以防止将网络位置放置在由于限制或障碍而无法访问的元素上。在使用此选项添加网络位置之前，请确保您已将所有限制屏障添加到输入网络分析图层以获得预期结果。此选项在添加障碍对象时不适用。</bullet_item><para/>
        ///     <bullet_item>未选中 - 网络位置将放置在网络的所有元素上。如果使用此选项添加的网络位置放置在受限图元上，则在求解过程中可能无法访问这些位置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Exclude Restricted Portions of the Network")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _exclude_restricted_portions_of_the_network_value _exclude_restricted_portions_of_the_network { get; set; } = _exclude_restricted_portions_of_the_network_value._true;

        public enum _exclude_restricted_portions_of_the_network_value
        {
            /// <summary>
            /// <para>EXCLUDE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>INCLUDE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Feature Locator WHERE Clause</para>
        /// <para>An SQL expression used to select a subset of source features that limits on which network elements orders and depots can be located. For example, to ensure orders and depots are not located on limited-access highways, write an SQL expression that excludes those source features. Note that the other network analysis objects, such as barriers, ignore the feature locator WHERE clause when loading.</para>
        /// <para>一个 SQL 表达式，用于选择源要素的子集，用于限制可以定位哪些网络元素、订单和仓库。例如，要确保订单和仓库不位于限制通行的高速公路上，请编写一个排除这些源要素的 SQL 表达式。请注意，其他网络分析对象（如障碍物）在加载时会忽略要素定位器 WHERE 子句。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Feature Locator WHERE Clause")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _feature_locator_where_clause { get; set; } = null;


        /// <summary>
        /// <para>Populate Route Lines</para>
        /// <para><xdoc>
        ///   <para>Specifies whether lines that show the true shape of the routes will be generated.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The route features will have their Shape fields populated with lines.</bullet_item><para/>
        ///     <bullet_item>Unchecked—No shape will be generated for the output routes.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否生成显示路径真实形状的线。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 路径要素的形状字段将填充线条。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会为输出路径生成任何形状。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Populate Route Lines")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _populate_route_lines_value _populate_route_lines { get; set; } = _populate_route_lines_value._true;

        public enum _populate_route_lines_value
        {
            /// <summary>
            /// <para>ROUTE_LINES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ROUTE_LINES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_ROUTE_LINES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_ROUTE_LINES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Route Line Simplification Tolerance</para>
        /// <para><xdoc>
        ///   <para>The simplification distance of the route geometry.</para>
        ///   <para>Simplification maintains critical points on a route, such as turns at intersections, to define the essential shape of the route and removes other points. The simplification distance you specify is the maximum allowable offset that the simplified line can deviate from the original line. Simplifying a line reduces the number of vertices and tends to reduce drawing times.</para>
        ///   <para>The value of this parameter is overridden when Travel Mode (travel_mode in Python) is set to any value other than custom.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>路径几何的简化距离。</para>
        ///   <para>简化保留路径上的关键点（例如交叉口处的转弯），以定义路径的基本形状并删除其他点。指定的简化距离是简化线可以偏离原始线的最大允许偏移量。简化线条可以减少顶点的数量，并倾向于减少绘制时间。</para>
        ///   <para>当“出行模式”（在 Python 中travel_mode）设置为除自定义以外的任何值时，将覆盖此参数的值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Route Line Simplification Tolerance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _route_line_simplification_tolerance { get; set; } = "10 Meters";


        /// <summary>
        /// <para>Populate Directions</para>
        /// <para><xdoc>
        ///   <para>Specifies whether driving directions will be generated.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Driving directions will be generated. The feature class specified in the Output Directions Name parameter is populated with turn-by-turn instructions for each route. The network dataset must support driving directions; otherwise, an error will occur when solving with directions.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Directions will not be generated.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否生成行驶方向。</para>
        ///   <bulletList>
        ///     <bullet_item>选中—将生成行驶方向。在输出方向名称参数中指定的要素类将填充每条路径的逐向说明。网络数据集必须支持行车路线;否则，使用方向求解时将发生错误。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会生成方向。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Populate Directions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _populate_directions_value _populate_directions { get; set; } = _populate_directions_value._false;

        public enum _populate_directions_value
        {
            /// <summary>
            /// <para>DIRECTIONS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DIRECTIONS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_DIRECTIONS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_DIRECTIONS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Directions Language</para>
        /// <para><xdoc>
        ///   <para>The language in which driving directions will be generated. The languages available in the drop-down list depend on which ArcGIS language packs are installed on your computer.</para>
        ///   <para>If you are going to publish this tool as part of a service on a separate server, the ArcGIS language pack that corresponds to the language you choose must be installed on that server for the tool to function properly. Also, if a language pack isn't installed on your computer, the language won't appear in the drop-down list; however, you can type a language code instead.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>生成行车方向的语言。下拉列表中可用的语言取决于计算机上安装的 ArcGIS 语言包。</para>
        ///   <para>如果要将此工具作为服务的一部分发布到单独的服务器上，则必须在该服务器上安装与您选择的语言相对应的 ArcGIS 语言包，该工具才能正常运行。此外，如果您的计算机上未安装语言包，则该语言不会显示在下拉列表中;但是，您可以改为键入语言代码。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Directions Language")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _directions_language { get; set; } = null;


        /// <summary>
        /// <para>Directions Style Name</para>
        /// <para><xdoc>
        ///   <para>Specifies the formatting style of directions.</para>
        ///   <bulletList>
        ///     <bullet_item>NA Desktop—Printable turn-by-turn directions</bullet_item><para/>
        ///     <bullet_item>NA Navigation—Turn-by-turn directions designed for an in-vehicle navigation device</bullet_item><para/>
        ///     <bullet_item>NA Campus—Turn-by-turn walking directions designed for pedestrian routes</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定方向的格式样式。</para>
        ///   <bulletList>
        ///     <bullet_item>NA Desktop - 可打印的逐向指示</bullet_item><para/>
        ///     <bullet_item>NA 导航 - 专为车载导航设备设计的转弯方向</bullet_item><para/>
        ///     <bullet_item>NA Campus - 专为人行道设计的转弯步行路线</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Directions Style Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _directions_style_name_value? _directions_style_name { get; set; } = null;

        public enum _directions_style_name_value
        {
            /// <summary>
            /// <para>NA Desktop</para>
            /// <para>NA Desktop—Printable turn-by-turn directions</para>
            /// <para>NA Desktop - 可打印的逐向指示</para>
            /// </summary>
            [Description("NA Desktop")]
            [GPEnumValue("NA Desktop")]
            _NA_Desktop,

            /// <summary>
            /// <para>NA Navigation</para>
            /// <para>NA Navigation—Turn-by-turn directions designed for an in-vehicle navigation device</para>
            /// <para>NA 导航 - 专为车载导航设备设计的转弯方向</para>
            /// </summary>
            [Description("NA Navigation")]
            [GPEnumValue("NA Navigation")]
            _NA_Navigation,

            /// <summary>
            /// <para>NA Campus</para>
            /// <para>NA Campus—Turn-by-turn walking directions designed for pedestrian routes</para>
            /// <para>NA Campus - 专为人行道设计的转弯步行路线</para>
            /// </summary>
            [Description("NA Campus")]
            [GPEnumValue("NA Campus")]
            _NA_Campus,

        }

        /// <summary>
        /// <para>Save Output Network Analysis Layer</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the output includes a network analysis layer of the results.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The output will include a network analysis layer of the results.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The output will not include a network analysis layer of the results.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>In either case, stand-alone tables and feature classes are returned. However, a server administrator may want to choose to output a network analysis layer so the setup and results of the tool can be debugged using the Network Analyst controls in the ArcGIS Desktop environment. This can make the debugging process easier.</para>
        ///   <para>In ArcGIS Desktop, the default output location for the network analysis layer is in the scratch workspace, at the same level as the scratch geodatabase; that is, it is stored as a sibling of the scratch geodatabase. The output network analysis layer is stored as an .lyr file whose name starts with _ags_gpna and is followed by an alphanumeric GUID.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输出是否包含结果的网络分析图层。</para>
        ///   <bulletList>
        ///     <bullet_item>选中—输出将包括结果的网络分析图层。</bullet_item><para/>
        ///     <bullet_item>未选中 - 输出将不包括结果的网络分析图层。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>无论哪种情况，都会返回独立表和要素类。但是，服务器管理员可能希望选择输出网络分析图层，以便可以在 ArcGIS Desktop 环境中使用 Network Analyst 控件调试工具的设置和结果。这可以使调试过程更容易。</para>
        ///   <para>在 ArcGIS Desktop 中，网络分析图层的默认输出位置位于临时工作空间中，与临时地理数据库处于同一级别;也就是说，它被存储为临时地理数据库的同级地理数据库。输出网络分析图层存储为 .lyr 文件，其名称以 _ags_gpna 开头，后跟字母数字 GUID。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Save Output Network Analysis Layer")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _save_output_layer_value _save_output_layer { get; set; } = _save_output_layer_value._false;

        public enum _save_output_layer_value
        {
            /// <summary>
            /// <para>SAVE_OUTPUT_LAYER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SAVE_OUTPUT_LAYER")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_SAVE_OUTPUT_LAYER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_SAVE_OUTPUT_LAYER")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Service Capabilities</para>
        /// <para><xdoc>
        ///   <para>Specifies the maximum amount of computer processing that occurs when running this tool as a geoprocessing service. You may want to do this for one of two reasons: to avoid letting your server solve problems that require more resources or processing time than you want to allow, or to create multiple services with different VRP capabilities to support a business model. For example, if you have a tiered-service business model, you may want to provide a free VRP service that supports a maximum of five routes per solve and another service that is fee-based and supports more than five routes per solve.</para>
        ///   <para>In addition to limiting the maximum number of routes, you can limit the number of orders or point barriers that can be added to the analysis. Another way to control problem sizes is by setting a maximum number of features—usually street features—that line or polygon barriers can intersect. The last method is to force a hierarchical solve, even if the user chooses not to use a hierarchy, when orders are geographically dispersed beyond a given straight-line distance.</para>
        ///   <bulletList>
        ///     <bullet_item>MAXIMUM POINT BARRIERS—The maximum number of point barriers allowed. An error is returned if this limit is exceeded. A null value indicates there is no limit.</bullet_item><para/>
        ///     <bullet_item>MAXIMUM FEATURES INTERSECTING LINE BARRIERS—The maximum number of source features that can be intersected by all line barriers in the analysis. An error is returned if this limit is exceeded. A null value indicates there is no limit.</bullet_item><para/>
        ///     <bullet_item>MAXIMUM FEATURES INTERSECTING POLYGON BARRIERS—The maximum number of source features that can be intersected by all polygon barriers in the analysis. An error is returned if this limit is exceeded. A null value indicates there is no limit.</bullet_item><para/>
        ///     <bullet_item>MAXIMUM ORDERS—The maximum number of orders allowed in the analysis. An error is returned if this limit is exceeded. A null value indicates there is no limit.</bullet_item><para/>
        ///     <bullet_item>MAXIMUM ROUTES—The maximum number of routes allowed in the analysis. An error is returned if this limit is exceeded. A null value indicates there is no limit.</bullet_item><para/>
        ///     <bullet_item>FORCE HIERARCHY BEYOND DISTANCE—The maximum straight-line distance between orders before the vehicle routing problem is solved using the network's hierarchy. The units for this value are the same as those specified in the Distance Field Units parameter.If the network doesn't have a hierarchy attribute, this constraint is ignored. If Use Hierarchy in Analysis is checked, hierarchy is always used. If the Use Hierarchy in Analysis parameter is unchecked and this constraint has a null value, hierarchy is not forced.</bullet_item><para/>
        ///     <bullet_item>MAXIMUM ORDERS PER ROUTE—The maximum number of orders that can be assigned to each route. An error is returned if this limit is exceeded. A null value indicates there is no limit.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将此工具作为地理处理服务运行时发生的最大计算机处理量。您可能希望执行此操作的原因有两个：避免让您的服务器解决需要比您希望允许的更多资源或处理时间的问题，或者创建具有不同 VRP 功能的多个服务来支持业务模型。例如，如果您具有分层服务业务模型，则可能希望提供免费的 VRP 服务，该服务支持每个求解最多 5 个路由，以及另一个收费服务，每个求解支持 5 个以上的路由。</para>
        ///   <para>除了限制最大路径数外，还可以限制可添加到分析中的订单或点障碍数。控制问题大小的另一种方法是设置线或面障碍可以相交的最大要素数（通常是街道要素）。最后一种方法是强制分层求解，即使用户选择不使用层次结构，当订单在地理上分散到给定的直线距离之外时也是如此。</para>
        ///   <bulletList>
        ///     <bullet_item>最大点障碍 - 允许的最大点障碍数。如果超过此限制，则返回错误。null 值表示没有限制。</bullet_item><para/>
        ///     <bullet_item>与线障碍相交的最大要素 - 分析中所有线障碍可相交的最大源要素数。如果超过此限制，则返回错误。null 值表示没有限制。</bullet_item><para/>
        ///     <bullet_item>与面障碍相交的最大要素 - 分析中所有面障碍可相交的最大源要素数。如果超过此限制，则返回错误。null 值表示没有限制。</bullet_item><para/>
        ///     <bullet_item>MAXIMUM ORDERS - 分析中允许的最大订单数。如果超过此限制，则返回错误。null 值表示没有限制。</bullet_item><para/>
        ///     <bullet_item>MAXIMUM ROUTES - 分析中允许的最大路径数。如果超过此限制，则返回错误。null 值表示没有限制。</bullet_item><para/>
        ///     <bullet_item>FORCE HIERARCHY BEYOND DISTANCE - 使用网络的层次结构求解车辆配送问题之前订单之间的最大直线距离。此值的单位与距离字段单位参数中指定的单位相同。如果网络没有层次结构属性，则忽略此约束。如果选中“在分析中使用层次结构”，则始终使用层次结构。如果未选中“在分析中使用层次结构”参数，并且此约束值为 null，则不强制执行层次结构。</bullet_item><para/>
        ///     <bullet_item>每条走线的最大订单数 - 可分配给每条走线的最大订单数。如果超过此限制，则返回错误。null 值表示没有限制。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Service Capabilities")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _service_capabilities { get; set; } = null;


        /// <summary>
        /// <para>Ignore Invalid Order Locations</para>
        /// <para><xdoc>
        ///   <para>Specifies whether invalid orders will be ignored when solving the vehicle routing problem.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The solve operation will ignore any invalid orders and return a solution, given it didn't encounter any other errors. If you need to generate routes and deliver them to drivers immediately, you may be able to ignore invalid orders, solve, and distribute the routes to your drivers. Next, resolve any invalid orders from the last solve and include them in the VRP analysis for the next workday or work shift.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The solve operation will fail when any invalid orders are encountered. An invalid order is an order that the VRP solver can't reach. An order may be unreachable for a variety of reasons, including if it's located on a prohibited network element, it isn't located on the network at all, or it's located on a disconnected portion of the network.</bullet_item><para/>
        ///   </bulletList>
        ///   <para></para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定在求解车辆配送路线问题时是否忽略无效订单。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 求解操作将忽略任何无效订单并返回解决方案，前提是它没有遇到任何其他错误。如果您需要生成路线并立即将其交付给司机，您可以忽略无效订单、解决路线并将其分发给司机。接下来，解决上次求解中的任何无效订单，并将其包含在下一个工作日或工作班次的 VRP 分析中。</bullet_item><para/>
        ///     <bullet_item>未选中 - 当遇到任何无效订单时，求解操作将失败。无效顺序是 VRP 求解器无法达到的顺序。订单可能由于各种原因而无法访问，包括如果订单位于被禁止的网络元素上，则根本不位于网络上，或者位于网络断开连接的部分。</bullet_item><para/>
        ///   </bulletList>
        ///   <para></para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Ignore Invalid Order Locations")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _ignore_invalid_order_locations_value _ignore_invalid_order_locations { get; set; } = _ignore_invalid_order_locations_value._false;

        public enum _ignore_invalid_order_locations_value
        {
            /// <summary>
            /// <para>SKIP</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SKIP")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>HALT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("HALT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Travel Mode</para>
        /// <para><xdoc>
        ///   <para>Choose the mode of transportation for the analysis. Custom is always a choice. For other travel mode names to appear, they must be present in the network dataset specified in the Network Dataset parameter.</para>
        ///   <para>A travel mode is defined on a network dataset and provides override values for parameters that, together, model cars, trucks, pedestrians, or other modes of travel. By choosing a travel mode here, you don't need to provide values for the following parameters, which are overridden by values specified in the network dataset:</para>
        ///   <para>
        ///     <bulletList>
        ///       <bullet_item>
        ///         <para>UTurn Policy</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>Time Attribute</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>Distance Attribute</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>Use Hierarchy in Analysis</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>Restrictions</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>Attribute Parameter Values</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>Route Line Simplification Tolerance</para>
        ///       </bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        ///   <bulletList>
        ///     <bullet_item>Custom—Define a travel mode that fits your specific needs. When Custom is chosen, the tool does not override the travel mode parameters listed above. This is the default value.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>选择用于分析的运输方式。定制始终是一种选择。要显示其他出行模式名称，它们必须存在于网络数据集参数中指定的网络数据集中。</para>
        ///   <para>出行模式是在网络数据集上定义的，它为参数提供覆盖值，这些参数一起对汽车、卡车、行人或其他出行模式进行建模。通过在此处选择出行模式，您无需为以下参数提供值，这些参数将被网络数据集中指定的值覆盖：</para>
        ///   <para>
        ///     <bulletList>
        ///       <bullet_item>
        ///         <para>UTurn 政策</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>Time 属性</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>距离属性</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>在分析中使用层次结构</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>限制</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>属性参数值</para>
        ///       </bullet_item><para/>
        ///       <bullet_item>
        ///         <para>路线简化容差</para>
        ///       </bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        ///   <bulletList>
        ///     <bullet_item>自定义 - 定义适合您特定需求的出行模式。选择“自定义”时，该工具不会覆盖上面列出的出行模式参数。这是默认值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Travel Mode")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _travel_mode { get; set; } = null;


        /// <summary>
        /// <para>Output Solve Succeeded</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Solve Succeeded")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _solve_succeeded { get; set; }


        /// <summary>
        /// <para>Output Unassigned Stops</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Unassigned Stops")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_unassigned_stops { get; set; }


        /// <summary>
        /// <para>Output Stops</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Stops")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_stops { get; set; }


        /// <summary>
        /// <para>Output Routes</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Routes")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_routes { get; set; }


        /// <summary>
        /// <para>Output Directions</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Directions")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_directions { get; set; }


        /// <summary>
        /// <para>Output Network Analysis Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Network Analysis Layer")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_network_analysis_layer { get; set; }


        /// <summary>
        /// <para>Ignore Network Location Fields</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the network location fields (SourceID, SourceOID, PosAlong, and SideOfEdge) will be considered when locating orders, depots, or barriers on the network.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Network location fields will not be considered when locating the inputs on the network. Instead, the inputs will always be located by performing a spatial search.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Network location fields will be considered when locating the inputs on the network. This is the default value.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定在网络上查找订单、仓库或障碍时是否考虑网络位置字段（SourceID、SourceOID、PosAlong 和 SideOfEdge）。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 在网络上定位输入时，将不考虑网络位置字段。相反，将始终通过执行空间搜索来定位输入。</bullet_item><para/>
        ///     <bullet_item>未选中 - 在网络上定位输入时将考虑网络位置字段。这是默认值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Ignore Network Location Fields")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _ignore_network_location_fields_value _ignore_network_location_fields { get; set; } = _ignore_network_location_fields_value._false;

        public enum _ignore_network_location_fields_value
        {
            /// <summary>
            /// <para>IGNORE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IGNORE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>HONOR</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("HONOR")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Time Zone Usage for Time Fields</para>
        /// <para><xdoc>
        ///   <para>Specifies the time zone for the following input date-time fields supported by the tool: TimeWindowStart1, TimeWindowEnd1, TimeWindowStart2, TimeWindowEnd2, InboundArriveTime, and OutboundDepartTime for orders; TimeWindowStart1, TimeWindowEnd1, TimeWindowStart2, and TimeWindowEnd2 for depots; EarliestStartTime and LatestStartTime for routes; and TimeWindowStart and TimeWindowEnd for breaks.</para>
        ///   <bulletList>
        ///     <bullet_item>Geo local— The date-time values associated with the orders or depots are in the time zone in which the orders and depots are located. For routes, the date-time values are based on the time zone in which the starting depot for the route is located. If a route does not have a starting depot, all orders and depots across all the routes must be in a single time zone. For breaks, the date-time values are based on the time zone of the routes. For example, if your depot is located in an area that follows eastern standard time and has the first time window values (specified as TimeWindowStart1 and TimeWindowEnd1) of 8 a.m. and 5 p.m., respectively, the time window values will be treated as 8 a.m. and 5 p.m. eastern standard time.</bullet_item><para/>
        ///     <bullet_item>UTC— The date-time values associated with the orders or depots are in Coordinated Universal Time (UTC) and are not based on the time zone in which the orders or depots are located. For example, if your depot is located in an area that follows eastern standard time and has the first time window values (specified as TimeWindowStart1 and TimeWindowEnd1) of 8 a.m. and 5 p.m., respectively, the time window values will be treated as 12 p.m. and 9 p.m. eastern standard time, assuming eastern standard time is obeying daylight saving time.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Specifying the date-time values in UTC is useful if you do not know the time zone in which the orders or depots are located or when you have orders and depots in multiple time zones and you want all the date-time values to start simultaneously. The UTC option is applicable only when your network dataset defines a time zone attribute. Otherwise, all the date-time values are always treated as Geo local (GEO_LOCAL in Python).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定工具支持的以下输入日期-时间字段的时区：订单的 TimeWindowStart1、TimeWindowEnd1、TimeWindowStart2、TimeWindowEnd2、InboundArriveTime 和 OutboundDepartTime;用于仓库的 TimeWindowStart1、TimeWindowEnd1、TimeWindowStart2 和 TimeWindowEnd2;路由的 EarliestStartTime 和 LatestStartTime;以及用于休息的 TimeWindowStart 和 TimeWindowEnd。</para>
        ///   <bulletList>
        ///     <bullet_item>Geo local— 与订单或仓库关联的日期时间值位于订单和仓库所在的时区中。对于路线，日期时间值基于路线的起始仓库所在的时区。如果工艺路线没有起始仓库，则所有工艺路线中的所有订单和仓库都必须位于单个时区。对于休息时间，日期时间值基于路线的时区。例如，如果您的仓库位于东部标准时间的区域，并且第一个时间窗口值（指定为 TimeWindowStart1 和 TimeWindowEnd1）分别为上午 8 点和下午 5 点，则时间窗口值将被视为东部标准时间上午 8 点和下午 5 点。</bullet_item><para/>
        ///     <bullet_item>UTC— 与订单或仓库关联的日期时间值采用协调世界时 （UTC），而不是基于订单或仓库所在的时区。例如，如果您的仓库位于遵循东部标准时间的区域，并且第一个时间窗口值（指定为 TimeWindowStart1 和 TimeWindowEnd1）分别为上午 8 点和下午 5 点，则时间窗口值将被视为东部标准时间下午 12 点和晚上 9 点，假设东部标准时间遵循夏令时。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>如果您不知道订单或仓库所在的时区，或者您的订单和仓库位于多个时区，并且希望所有日期时间值同时启动，则以 UTC 指定日期时间值非常有用。仅当网络数据集定义时区属性时，UTC 选项才适用。否则，所有日期时间值始终被视为 Geo local（在 Python 中为 GEO_LOCAL）。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time Zone Usage for Time Fields")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _time_zone_usage_for_time_fields_value _time_zone_usage_for_time_fields { get; set; } = _time_zone_usage_for_time_fields_value._GEO_LOCAL;

        public enum _time_zone_usage_for_time_fields_value
        {
            /// <summary>
            /// <para>Geo local</para>
            /// <para>Geo local— The date-time values associated with the orders or depots are in the time zone in which the orders and depots are located. For routes, the date-time values are based on the time zone in which the starting depot for the route is located. If a route does not have a starting depot, all orders and depots across all the routes must be in a single time zone. For breaks, the date-time values are based on the time zone of the routes. For example, if your depot is located in an area that follows eastern standard time and has the first time window values (specified as TimeWindowStart1 and TimeWindowEnd1) of 8 a.m. and 5 p.m., respectively, the time window values will be treated as 8 a.m. and 5 p.m. eastern standard time.</para>
            /// <para>Geo local— 与订单或仓库关联的日期时间值位于订单和仓库所在的时区中。对于路线，日期时间值基于路线的起始仓库所在的时区。如果工艺路线没有起始仓库，则所有工艺路线中的所有订单和仓库都必须位于单个时区。对于休息时间，日期时间值基于路线的时区。例如，如果您的仓库位于东部标准时间的区域，并且第一个时间窗口值（指定为 TimeWindowStart1 和 TimeWindowEnd1）分别为上午 8 点和下午 5 点，则时间窗口值将被视为东部标准时间上午 8 点和下午 5 点。</para>
            /// </summary>
            [Description("Geo local")]
            [GPEnumValue("GEO_LOCAL")]
            _GEO_LOCAL,

            /// <summary>
            /// <para>UTC</para>
            /// <para>UTC— The date-time values associated with the orders or depots are in Coordinated Universal Time (UTC) and are not based on the time zone in which the orders or depots are located. For example, if your depot is located in an area that follows eastern standard time and has the first time window values (specified as TimeWindowStart1 and TimeWindowEnd1) of 8 a.m. and 5 p.m., respectively, the time window values will be treated as 12 p.m. and 9 p.m. eastern standard time, assuming eastern standard time is obeying daylight saving time.</para>
            /// <para>UTC— 与订单或仓库关联的日期时间值采用协调世界时 （UTC），而不是基于订单或仓库所在的时区。例如，如果您的仓库位于遵循东部标准时间的区域，并且第一个时间窗口值（指定为 TimeWindowStart1 和 TimeWindowEnd1）分别为上午 8 点和下午 5 点，则时间窗口值将被视为东部标准时间下午 12 点和晚上 9 点，假设东部标准时间遵循夏令时。</para>
            /// </summary>
            [Description("UTC")]
            [GPEnumValue("UTC")]
            _UTC,

        }

        /// <summary>
        /// <para>Overrides</para>
        /// <para><xdoc>
        ///   <para>Specifies additional settings that can influence the behavior of the solver when finding solutions for the network analysis problems.</para>
        ///   <para>The value for this parameter must be specified in JavaScript Object Notation (JSON). For example, a valid value is of the following form {"overrideSetting1" : "value1", "overrideSetting2" : "value2"}. The override setting name is always enclosed in double quotes. The values can be a number, Boolean, or string.</para>
        ///   <para>The default value for this parameter is no value, which indicates not to override any solver settings.</para>
        ///   <para>Overrides are advanced settings that should be used only after careful analysis of the results obtained before and after applying the settings. A list of supported override settings for each solver and their acceptable values can be obtained by contacting Esri Technical Support.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定在查找网络分析问题的解决方案时可能影响求解程序行为的其他设置。</para>
        ///   <para>此参数的值必须在 JavaScript 对象表示法 （JSON） 中指定。例如，有效值的格式如下：{“overrideSetting1” ： “value1”， “overrideSetting2” ： “value2”}。替代设置名称始终用双引号括起来。这些值可以是数字、布尔值或字符串。</para>
        ///   <para>此参数的默认值为 no value，表示不覆盖任何求解器设置。</para>
        ///   <para>替代是高级设置，只有在仔细分析应用设置之前和之后获得的结果后，才应使用。可联系 Esri 技术支持获取每个求解器支持的覆盖设置列表及其可接受值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Overrides")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _overrides { get; set; } = null;


        /// <summary>
        /// <para>Save Route Data</para>
        /// <para><xdoc>
        ///   <para>Specifies whether to save a .zip file that contains a file geodatabase containing the inputs and outputs of the analysis in a format that can be used to share route layers with ArcGIS Online or ArcGIS Enterprise.</para>
        ///   <para>In ArcGIS Desktop, the default output location for this output file is in the scratch folder. You can determine the location of the scratch folder using arcpy.env.scratchFolder or checking the geoprocessing environment.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The tool writes out a .zip archive containing a file geodatabase workspace that contains the inputs and outputs of the analysis.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Route data is not saved. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否保存包含包含分析输入和输出的文件地理数据库的文件地理数据库的 .zip 文件，其格式可用于与 ArcGIS Online 或 ArcGIS Enterprise 共享路径图层。</para>
        ///   <para>在 ArcGIS Desktop 中，此输出文件的默认输出位置位于临时文件夹中。您可以使用 arcpy.env.scratchFolder 或检查地理处理环境来确定临时文件夹的位置。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 该工具将写出一个 .zip 存档，其中包含包含分析输入和输出的文件地理数据库工作空间。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不保存路径数据。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Save Route Data")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _save_route_data_value _save_route_data { get; set; } = _save_route_data_value._false;

        public enum _save_route_data_value
        {
            /// <summary>
            /// <para>SAVE_ROUTE_DATA</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SAVE_ROUTE_DATA")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_SAVE_ROUTE_DATA</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_SAVE_ROUTE_DATA")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Route Data</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Route Data")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_route_data { get; set; }


        public SolveVehicleRoutingProblem SetEnv(object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}